掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
浮動小数点で誤差発生のデータを作成するには? (ID:115169)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 今回の目標はうまくデータを作成することにあり、 であれば、「浮動小数点型を使わない」のが一番でしょう。 たとえば、Currencyを使うとか。 > 逆に誤差がどのようなデータで発生するのかを調べたいのです 厳密に定義すると大変ですが、大まかに言えば、 「循環小数」の場合に発生すると思えば良いかと思います。 10進数で、「10÷3」を正しく表現できないのと同様、 2進数でも、表現しきれない数値と言うものが存在します。 (桁数を無限に持てれば表現できますが、コンピュータのメモリは有限ですしね) たとえば、0.5、0.125、0.375 等は2進数でも現せますが、 0.05 だと、無限小数になってしまいます。 今回の0.032の場合も、2進数で表そうとすれば、 0.03125000000000000000 = 2^-5 0.03173828125000000000 = 2^-5 + 2^-11 0.03198242187500000000 = 2^-5 + 2^-11 + 2^-12 0.03199768066406250000 = 2^-5 + 2^-11 + 2^-12 + 2^-16 0.03199958801269530000 = 2^-5 + 2^-11 + 2^-12 + 2^-16 + 2^-19 : : のようになりますので、有限の桁数で表現すると、0.32 よりも 微妙に小さな値になります。 > (CPU等にも依存するそうですが・・・) さらにいうと、コンパイルモード(ネイティブコンパイル/P-Codeコンパイル)の 違いによっても、誤差が変わってくることがあります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.