2017-02-25 3 views
-1
ここ

は私のコードの一部であり、異なる出力を与える:2のコンピュータは(私はそれを象徴)

#include <iostream> 
#include <cmath> 
#include <iomanip> 

int main() 
{ 
    double pi = M_PI; 
    long long x = 12026548095792; 
    std::cout << std::fixed << std::setprecision(8) << pi * x; 
} 

マイコンピュータの出力だった:

37782515145784.46100000 

する(Windows 7のx64プロセッサ:インテル(Rを)Core(TM)i3-2328M CPU @ 2.20GHz)。
しかし、私はSPOJに私のコードを実行したときに、出力が

37782515145784.46093750 

た(クラスタ:キューブ(インテルG860))。
この問題の説明にお役立てください。

update:コードブロック16.01、gccバージョン5.3.0を使用しました。

+1

コンパイルフラグも投稿してください – Mikhail

+0

おそらくhttp://christian-seiler.de/projekte/fpmath/やhttps://gcc.gnu.org/wiki/FloatingPointMathのようなものがどうなるか説明しています。問題の修正方法は、使用するコンパイラとターゲットプラットフォームのセットによって異なります。 – SergGr

+0

ありがとうございました。 –

答えて

1

ダブルの精度は約15桁で、二つの数が同じ(彼らは自分の「ゴミの部分」が異なる)

あるので、これはどのようにFPユニットは、内部作業に起因する可能性が高いですおそらく方法M_PIが定義された事項である

(精密過剰充填ゼロによること、または単により速くなるようにごみを運ぶことによってもよい)(80ビットであってもよい)とFPユニットに渡されたときにどのように二重処理されます。 acos(-1)のようなものを試しましたか?

一般に、FP計算が正確でどこでも同じであるとは思わない。

関連する問題