私は、JavaとC/C++の両方でいくつかの参照アルゴリズムをコーディングしています。これらのアルゴリズムの一部はπを使用します。それぞれのアルゴリズムの2つの実装で、と同じの結果が得られるようにしたいと思います。今まで一貫してこれを実行した方法の1つは、カスタム定義のpi
定数を使用することです。この定数は、両方の言語で正確に同じです(3.14159など)。しかし、すでにJavaとGCCの両方のライブラリで定義されている高精度定数がある場合、piを定義するのは馬鹿げています。java.lang.Math.PIはGCCのM_PIと同じですか?
私は、いくつかの時間を費やして、各ライブラリのドキュメントを見て、浮動小数点型を読んでいました。しかし、私はjava.lang.Math.PI(またはjava.lang.StrictMath.PI)がmath.hのM_PIと等しいかそうでないことを自分自身で確信することができませんでした。
GCC 3.4.4(cygwinの)のmath.hは含まれています
#define M_PI 3.14159265358979323846
^^^^^
が、この
printf("%.20f", M_PI);
は最後の5桁が信頼できないことを示唆して
3.14159265358979311600
^^^^^
を生成します。
一方のJavadocはjava.lang.Math.PIであることを言う:PI、そのに対する円の 円周の比率に より近い他のある
double
値直径は です。
と定数から疑問の最後の5桁を省略し
public static final double PI 3.141592653589793d
。
System.out.printf("%.20f\n", Math.PI);
あなたは浮動小数点データ型にいくつかの専門知識を持っている場合は、これらのライブラリの定数が正確に同じであることを私に納得させることができますか?
3.14159265358979300000
^^^^^
を生成しますかそれとも、彼らは間違いなく平等ではないのですか?
Cでは、pi = M_PIをdoubleにすることができます。 printf( "%lld \ n"、pi);同じ64ビット整数を取得する:4614256656552045848 –
ありがとうブルーノは、かなり元の質問に答える。 – JeeBee