目次> 第7章> 7.2 | TOPUPPREVNEXT |
浮動小数点は、有効数字(仮数部)と 桁移動(指数部)の組合せで、以下のような広い範囲の数を表現します。
型 | サイズ | 指数部 | 仮数部 | 値の範囲 |
---|---|---|---|---|
float | 32ビット | 8ビット | 24ビット | ±3.40282347E+38 〜 ±1.40239846E-45 |
double | 64ビット | 11ビット | 53ビット | ±1.79769313486231570E+308 〜 ±4.94065645841246544E-324 |
float と double の有効数字の桁数を調べて見ましょう。
10進数で数えて、float は7〜8桁、 double は 16桁程度の有効数字であることがわかります。
確認するプログラムを作ってみましょう。
浮動小数点で表現可能な絶対値の一番小さい数は、 Float.MIN_VALUE および Double.MIN_VALUE で参照できます。
判定アルゴリズム
実行結果
double は 16桁まで、 float は 7桁まで正しい値になっています。
プログラム例 CompFloat1.java
実行結果
また、上記の結果を見て、 0.9999999... を 1.0 と、 1.0999999... を 1.1 と 読めるようにしましょう。
2つの浮動小数点数が等しいかどうかの判定も工夫が必要です。 小数点以下の有効数字をもつ場合、計算結果が同じになることは稀です。
したがって、計算結果が等しいかどうかの判定には
大小比較も同じ問題が発生しますので、 まず上記のいずれかの方法で「等しい」場合を判定し、 それ以外の場合について 「 < 」 や 「 > 」 で判定するのがよいでしょう。
更新日:2012/04/02 | TOPUPPREVNEXT |