• ベストアンサー

double型からfloat型への型変換について

double型で-999.999という数字をfloat型へキャストして 少数以下6桁をprintf文で表示すると、それぞれ以下の様になりました。 double -999.999000 float -999.999023 これは、単純にfloatの精度の問題なのでしょうか? また、計算機がどういうルールに基づいて計算をおこなっているということなのでしょうか? 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.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-1/NUMCOMPGD/ncgTOC.html

関連するQ&A