2016-05-14 8 views
2

バイナリベースで0.1のような10進数を表現することが不可能であることに加えて、非正規化浮動小数点の設計による不正確さ。倍精度浮動小数点数を使って作業するとき、他に不正確な原因がありますか?ダブル浮動小数点数の不正確さの原因

+0

@RyanVincentは私にそれを打つ。私の質問は、あなたが一般的な好奇心からこの質問をしているのか、それともあなたが取り組んでいる特定のトピックに関連しているのかどうかです。私は経験則に従っています:もし私が_小数点以下の尺度(例えば、通貨または小数点以下の桁数)で作業していたら、小数点タイプを使用します。私が連続的な値で作業していた場合は、小数点タイプを使用することがあります。そして、変換が起こっているかどうかという疑問があります。 –

答えて

2

次のようにフロートの数値不正確さのちょうど1つの奇妙な例は次のとおりです。

1フロートに9999999.4999999999を変換し、バック、ダブルにした場合、結果はその値が明らか9999999に近いにもかかわらず、10000000のように与えられます9999999.499999999が正しく9999999

に丸め、とにもかかわらず、私は、これは非常に具体的な例が、より詳細であることを理解し、ここで見つけることができます(と科学的推論!):

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

+0

「9999999.4999999999をダブルに変換してからフロートに変換する」という意味です。また、これは「二重丸め」と呼ばれているので、それがどれほど奇妙であるか、どのように浮動小数点固有であるかはわかりません。 –

関連する問題