2011-06-06 10 views
8

numeric_limits::espilonは、1と次の倍の差を返します。だから、2つの隣接する倍数の間の距離が常に同じではない、たとえば2と次の倍数の間の距離がわかるはずですか?std:numeric_limits <double> ::イプシロン定義

もしそうなら、説明がありますか?あなたは遠く離れて、ゼロから取得するよう

答えて

16

浮動小数点数の「密度」たくさんを減少させます。

これは、IEEE浮動小数点は基本的に科学記法として格納されているため、範囲は均一精度よりも優先されるからです。指数が大きくなるので、もし(それが均一な精度であった場合、それは固定小数点ではなく、浮動小数点であろう。)すなわち

、数字は、フォーム仮数* 2 指数に格納され、仮数部の小さな変化は数の大きな変化をもたらします(逆も同様です)。

だから、2と次の倍数の差がεと同じであると仮定することはできません。そうではありません。

+2

これは意識的な設計選択であることを指摘しておく価値があります。ゼロに近い高い精度を持つことはしばしば役に立ちますが、大きな数値ではより寛容です。だから、float/doubleは、正確で小さな数値ではあるが、それほど正確ではないものの、しばしば*良い*良い丸型のデータ型です。これは、シンプルな32ビットまたは64ビット幅のデータ型を可能な限り広く使用するための試みです。とにかく、私の+1 – jalf

2

倍精度浮動小数点数です。それらはsignum、significandと指数で構成されています。

指数が高いほど、倍数と後続指数の差が大きくなります。

指数が低いほど、倍数と後続指数の差は小さくなります。

関連する問題