たとえば、最初は次のコードがありました:
リーリー
後で、y は x と同じでなければならないことがわかりました。x y を x * 2 に再構築したいと考えましたが、プログラム全体が再構築の前後で同じ動作をすることを確認する必要がありました。 x x は x*2 と同じですか?と * が異なる計算メカニズムを使用しているため、異なる結果に丸められるかどうかはわかりません。
私がテストした:
リーリー
i の特定の範囲については正しいようですが、すべての浮動小数点数について正しいかどうかはわかりません。
JavaScript は ECMAScript の実装であり、ECMAScript 仕様 は、IEEE 754 アルゴリズムを使用した IEEE-754「倍精度」(binary64) 形式を表します。 「…数値に適用する場合、演算子は IEEE 754-2019 の関連演算を参照します…」
IEEE 754 および任意の合理的な浮動小数点システムでは、演算の結果は、選択した丸め規則 (例: 最も近い同値に丸める、偶数に丸める、偶数に丸める) に従ってゼロに向かって丸められた正確な数学的結果です。切り上げまたは切り捨て)。 IEEE 754-2019 4.3 には次のように記載されています:
上記は、
xx
#xxxと 2•#xxx
は同じ数学的結果をもつため、浮動小数点演算x x
code> と2* x
は同じ計算結果を生成する必要があります。同じ丸めルールが適用される場合、どちらも同じ数学的結果を与えるため、計算は同じでなければなりません。が ∞ と -∞ を含む数値である場合をカバーしています。
x
がNaN
の場合、x x
と2*x
もNaN
コード> を生成するため、結果は次のようになります。また同じです。 (この場合、x x == 2*x
は false と評価されることに注意してください。NaN は、それ自身であっても、他のものと等しくないためです。それにもかかわらず、どちらの操作でも同じ結果が生成されます。次の場合、プログラムの動作は同じになります。x x
の代わりに2*x
が使用され、その逆も同様です。)