私はこのコード奇妙な行動
#include <stdio.h>
#include <math.h>
static double const x = 665857;
static double const y = 470832;
int main(){
double z = x*x*x*x -y*y*y*y*4 - y*y*4;
printf("%f \n",z);
return 0;
}
これの真の解決策は、方程式であるを持っているが、1としては、すでに自分で前の質問に答えている、このコードがあるため、壊滅的なキャンセルの失敗します。しかし、今私はさらに奇妙なことを見つけました。私が知っている限り、彼らはダブルスよりも狭い範囲を持っている間、あなたは長いロングを使用する場合に機能します。どうして?
[倍精度の奇妙な動作の可能な重複。説明が必要](http://stackoverflow.com/questions/10505411/double-precision-strange-behaviour-need-an-explanation) –
これは重複していません。私はすでにこれが自分自身が尋ねた同様の問題の第2の問題だと指摘しました。 – bluehallu