浮動小数点数 x の場合、アンダーフローとオーバーフローがなければ、x+x と x*2 の結果は同じですか?
P粉064448449
P粉064448449 2023-09-07 10:08:44
0
1
569

たとえば、最初は次のコードがありました:

リーリー

後で、y は x と同じでなければならないことがわかりました。x y を x * 2 に再構築したいと考えましたが、プログラム全体が再構築の前後で同じ動作をすることを確認する必要がありました。 x x は x*2 と同じですか?と * が異なる計算メカニズムを使用しているため、異なる結果に丸められるかどうかはわかりません。

私がテストした:

リーリー

i の特定の範囲については正しいようですが、すべての浮動小数点数について正しいかどうかはわかりません。

P粉064448449
P粉064448449

全員に返信(1)
P粉012875927

JavaScript は ECMAScript の実装であり、ECMAScript 仕様 は、IEEE 754 アルゴリズムを使用した IEEE-754「倍精度」(binary64) 形式を表します。 「…数値に適用する場合、演算子は IEEE 754-2019 の関連演算を参照します…」

IEEE 754 および任意の合理的な浮動小数点システムでは、演算の結果は、選択した丸め規則 (例: 最も近い同値に丸める、偶数に丸める、偶数に丸める) に従ってゼロに向かって丸められた正確な数学的結果です。切り上げまたは切り捨て)。 IEEE 754-2019 4.3 には次のように記載されています:

x #xxx と 2•#xxx は同じ数学的結果をもつため、浮動小数点演算 x x code> と 2* x は同じ計算結果を生成する必要があります。同じ丸めルールが適用される場合、どちらも同じ数学的結果を与えるため、計算は同じでなければなりません。 上記は、

x

が ∞ と -∞ を含む数値である場合をカバーしています。 xNaN の場合、x x2*xNaN コード> を生成するため、結果は次のようになります。また同じです。 (この場合、x x == 2*x は false と評価されることに注意してください。NaN は、それ自身であっても、他のものと等しくないためです。それにもかかわらず、どちらの操作でも同じ結果が生成されます。次の場合、プログラムの動作は同じになります。 x x の代わりに 2*x が使用され、その逆も同様です。)

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート