トップページ > プログラム > 2019年10月05日 > KADe2ROY

書き込み順位&時間帯一覧

14 位/199 ID中時間01234567891011121314151617181920212223Total
書き込み数1000000020010000000000004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part145

書き込みレス一覧

C++相談室 part145
351 :デフォルトの名無しさん[sage]:2019/10/05(土) 00:05:26.41 ID:KADe2ROY
>>347
・そのコードは、完全に上記の通りですか?

例えば、ループ回数が1000回より遥かに多くなると、
誤差の都合でそうなることがあるかもしれませんが、1000回くらい
だと、正しい処理系ではその現象は起きないはずです。
C++相談室 part145
359 :デフォルトの名無しさん[sage]:2019/10/05(土) 08:49:33.11 ID:KADe2ROY
>>353
計算誤差です。
(0.2+0.3)+0.4 == 0.2+(0.3+0.4) が偽になっても
(0.2+0.3)+0.4 == (0.2+0.3)+0.4 や
0.2+(0.3+0.4) == 0.2+(0.3+0.4)
は必ず真になることが保障されています。
C++相談室 part145
360 :デフォルトの名無しさん[sage]:2019/10/05(土) 08:55:38.66 ID:KADe2ROY
>>359
コンピュータにおける浮動小数点は、内部表現は10進数ではなく2進数
で表現されており、有効桁数は 10 進数で 8 桁や 15桁などではなく
2進数で xx BIT という風になっています。
0.2, 0.3, 0.4 は、10進数だと、有効桁数が1桁でも完全に区切れが
よく表現できていますが、2進数の表現だと厳密には無限小数になってしまい、
どんなに有効桁数を長くしても厳密には表現できません。そのため計算誤差
が生じるのです。0.5 や 0.25 や 0.125 は 2 進数でも区切れ良く表現できるため、
 (0.125+0.25)+0.5 == 0.125+(0.25+0.5)
は誤差が生じることがないため、必ず真になるはずです。
C++相談室 part145
362 :デフォルトの名無しさん[sage]:2019/10/05(土) 11:34:20.93 ID:KADe2ROY
>>361
誤差の量が計算の順序や書き方によって変わってくるので、
そのようなヘッダに書かれているような誤差定数を使うことは
余り意味がありません。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。