我已经搜索过这个问题,但我什么也没找到。问题是,当我有一个很大的 int 时,16777217
我将它转换为float
,真正的价值是16777216
。我不知道如何避免这个问题。请注意,我必须使用int
and float
,因为我将 传递int
给fmodf
函数,该函数会自动将 int 参数转换为 float。
问问题
251 次
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
。
您可以使用double
orlong double
代替。例如,IEEE-754 双精度double
最多可以表示整数值2^53
。(大约10^16
)
于 2013-10-05T09:53:21.020 回答
-3
浮点数是不精确的。整数不是。
因此,要将一个转换为另一个,您将始终遇到此问题。
所以解决方案是决定准确性
于 2013-10-05T09:50:54.253 回答