0

我已经搜索过这个问题,但我什么也没找到。问题是,当我有一个很大的 int 时,16777217我将它转换为float,真正的价值是16777216。我不知道如何避免这个问题。请注意,我必须使用intand float,因为我将 传递intfmodf函数,该函数会自动将 int 参数转换为 float。

4

3 回答 3

4

float确实有有限的位数,所以没有无限的精度。

16777217是 a float(IEEE-754binary32类型)不能精确表示的第一个整数值,它存储为16777216.

double如果您想要更精确,请使用。

于 2013-10-05T09:49:25.963 回答
3

今天的大多数机器都遵循 ISO/IEC/IEEE 60559:2011,或相同的IEEE-754 浮点标准。

IEEE-754单精度float最多可以精确表示整数值2^24,也就是精确16777216

您可以使用doubleorlong double代替。例如,IEEE-754 双精度double最多可以表示整数值2^53。(大约10^16

于 2013-10-05T09:53:21.020 回答
-3

浮点数是不精确的。整数不是。

因此,要将一个转换为另一个,您将始终遇到此问题。

所以解决方案是决定准确性

于 2013-10-05T09:50:54.253 回答