[解決済み】sumの順番を変えると違う結果になるのはなぜですか?
質問
sumの順番を変えると、なぜ違う結果になるのですか?
23.53 + 5.88 + 17.64
=
47.05
23.53 + 17.64 + 5.88
=
47.050000000000004
浮動小数点数の2進数の表現方法の関係で、一部の有理数( 1/3 - 0.333333... のように。 を正確に表現することができません。
なぜ、要素の順番を変えるだけで結果に影響が出るのでしょうか?
どのように解決するのですか?
<ブロッククオートくだらない質問かもしれませんが、なぜ要素の順番を変えるだけで結果に影響が出るのでしょうか?
値の大きさに応じて、丸めるポイントを変えるのです。の例として 種類 バイナリ浮動小数点の代わりに、有効数字4桁の10進浮動小数点を使用し、各加算をquot;infinite"の精度で実行した後、最も近い表現可能な数字に丸めたと仮定してみましょう。ここに2つの合計があります。
1/3 + 2/3 + 2/3 = (0.3333 + 0.6667) + 0.6667
= 1.000 + 0.6667 (no rounding needed!)
= 1.667 (where 1.6667 is rounded to 1.667)
2/3 + 2/3 + 1/3 = (0.6667 + 0.6667) + 0.3333
= 1.333 + 0.3333 (where 1.3334 is rounded to 1.333)
= 1.666 (where 1.6663 is rounded to 1.666)
非整数でなくても問題ありません。
10000 + 1 - 10000 = (10000 + 1) - 10000
= 10000 - 10000 (where 10001 is rounded to 10000)
= 0
10000 - 10000 + 1 = (10000 - 10000) + 1
= 0 + 1
= 1
このことは、重要な部分が、限られた数の 有効数字 - の数に限りがあるのではなく 小数点以下の桁数 . 小数点以下の桁数が常に同じであれば、少なくとも足し算と引き算では、(値がオーバーフローしない限り)問題ないだろう。問題は、大きな数字になると、小さな情報が失われてしまうことです。この場合、10001は10000に丸められ、10001は10000になります。(これは、以下のような問題の一例です。 Eric Lippertが回答で指摘した .)
右辺の1行目の値は、どのような場合でも同じであることに注意してください。つまり、10進数(23.53, 5.88, 17.64)が、正確に
double
という値がありますが、これは上に示したような問題があるからこその問題です。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] Facebookがブラウザに統合されたDeveloper Toolsを無効にする方法を教えてください。
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み】なぜ10進数は2進数で正確に表現できないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません。
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?
-
[解決済み] IntegerからBigIntegerへの変換