2

Cnetos 6.2.0 バージョン 64 ビット マシンで簡単なプログラムを実行しています。

int main()
{

int b = 1078085270;//1078085218;
float a;
a = (float)(b);

printf("val of a  is %f\n",a);

return 0;
}

a の出力は 1078085248 です。値を 1078085218 に変更しました。それでも同じ結果が得られました。出力が破損または変更される理由または方法を理解できません。

誰でも説明できますか?

4

1 に答える 1

4

1078085270数値を 2 進数で見てください。

b1000000010000100100011010010110

IEEE-754 単精度浮動小数点数の精度は 24 ビットしかありませんが、この数値には有効ビット数が 24 を超えるため、この数値を にキャストするときはfloat丸める必要があります。で表現できる最も近い 2 つの数値は次のfloatとおりです。

b100000001000010010001101 0000000
b100000001000010010001110 0000000

(スペースは、24 桁目と 25 桁目の区切り、数値が丸められるポイントを示します)。数値は最初の数値に近いため、その値 ( 107808524810 進数) に丸められます。

于 2013-08-21T18:06:12.003 に答える