なぜこれが正しいのですか?Java は、C や Java の Math.pow メソッドと比べて、2 つの浮動小数点数を乗算する際にわずかな差異を伴う結果を生成するように見えます。
ジャワ:
float a = 0.88276923;
double b = a * a; // b becomes 0.779281497001648 <---- what???
b = Math.pow(a,2); // b becomes 0.7792815081874238
子:
float a = 0.88276923;
double b = a * a; // b becomes 0.7792815081874238
pow(a,2); // b becomes 0.7792815081874238
更新: Ed S. のコメントによると、コンパイラによって C の動作が変わることもわかりました。gcc を使用すると、Java の動作と一致するように見えます。Visual Studio を使用すると (ターゲット プラットフォームによって異なります)、上記の結果または Java で見られる結果を生成できます。うーん。