我已经在搜索这个问题,但我什么都没找到。问题是,当我有一个大的int,比如16777217
,并且我将其转换为float
时,实际值为16777216
。我无法弄清楚如何避免这个问题。请注意,我必须使用int
和float
,因为我将int
传递给fmodf
函数,该函数会自动将int参数转换为float。
答案 0 :(得分:4)
float
确实具有有限的位数,因此没有无限精度。
16777217
是float
(IEEE-754 binary32
类型)无法精确表示的第一个整数值,它存储为16777216
。
如果您想要更高的精确度,请使用double
。
答案 1 :(得分:3)
目前大多数机器都遵循ISO / IEC / IEEE 60559:2011或相同的IEEE-754 floating point标准。
IEEE-754单精度float
可以精确地表示最多2^24
的整数值,这恰好是16777216
。
您可以改用double
或long double
。例如,IEEE-754双精度double
可以表示最多2^53
的整数值。 (约10^16
)
答案 2 :(得分:-3)
浮点数不精确。整数不是。
因此,要将一个转换为另一个,您将始终遇到此问题。
所以解决方案是决定准确性