プロが教える店舗&オフィスのセキュリティ対策術

double型で-999.999という数字をfloat型へキャストして
少数以下6桁をprintf文で表示すると、それぞれ以下の様になりました。

double -999.999000
float -999.999023

これは、単純にfloatの精度の問題なのでしょうか?
また、計算機がどういうルールに基づいて計算をおこなっているということなのでしょうか?
教えてください。

A 回答 (1件)

> これは、単純にfloatの精度の問題なのでしょうか?



その通りです。

IEEE 754 のフォーマットにしたがった 32ビット浮動小数点表記では仮数部が
23ビットですから、高々7桁程度の精度しかありません。


> また、計算機がどういうルールに基づいて計算をおこなっているということなのでしょうか?

double → float の場合には、仮数部が 52 → 23 ビット、指数部が 12 → 8 ビットと少なくなります。
元の数値が float で表現できる範囲で収まるのであれば、仮数部のビットを切りつめて、指数部を変換する
だけです。

元の数値が float に収まりきらない場合には、overflow や underflow が発生します。

真剣に知りたいのであれば、参考URL をどうぞ。

参考URL:http://docs.sun.com/htmlcoll/coll.648.2/iso-8859 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!