- ベストアンサー
double型からfloat型への型変換について
double型で-999.999という数字をfloat型へキャストして 少数以下6桁をprintf文で表示すると、それぞれ以下の様になりました。 double -999.999000 float -999.999023 これは、単純にfloatの精度の問題なのでしょうか? また、計算機がどういうルールに基づいて計算をおこなっているということなのでしょうか? 教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> これは、単純にfloatの精度の問題なのでしょうか? その通りです。 IEEE 754 のフォーマットにしたがった 32ビット浮動小数点表記では仮数部が 23ビットですから、高々7桁程度の精度しかありません。 > また、計算機がどういうルールに基づいて計算をおこなっているということなのでしょうか? double → float の場合には、仮数部が 52 → 23 ビット、指数部が 12 → 8 ビットと少なくなります。 元の数値が float で表現できる範囲で収まるのであれば、仮数部のビットを切りつめて、指数部を変換する だけです。 元の数値が float に収まりきらない場合には、overflow や underflow が発生します。 真剣に知りたいのであれば、参考URL をどうぞ。