C、C、Java では、浮動小数点数を使用して数学的演算を実行します。次に、浮動小数点数が結合規則に従っているかどうかを確認します。
答えは否定的です。場合によっては、浮動小数点数が結合規則に従っていないことがあります。ここでいくつかの例を見てみましょう。
#include<iostream> using namespace std; main() { float x = -500000000; float y = 500000000; float z = 1; cout << "x + (y + z) is: " << x + (y + z) << endl; cout << "(x + y) + z is "<< (x + y) + z << endl; }
x + (y + z) is: 0 (x + y) + z is 1
ここでは、結果が同じではないことがわかりますが、理論的には常に 1 であると言えます。ここで疑問が生じますが、これはどのように行われるのでしょうか?
最初のケースでは、x (y z)、(500000000 1) が実行されています。ただし、浮動小数点数の場合 四捨五入後、再度 500000000 に変換されます。ここに -500000000 を加えると 0 になります。 2 番目の式では、値は (-500000000 500000000) = 0 で、その後 1 が加算されるため、最終結果は次のようになります。 結果は 1 です。
整数を使用すると、どちらの式も同じ結果 (1) を返します。
以上がC、C++、および Java での浮動小数点演算と結合演算の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。