将big int转换为C中的float

时间:2013-10-05 09:46:50

标签: c floating-point

我已经在搜索这个问题,但我什么都没找到。问题是,当我有一个大的int,比如16777217,并且我将其转换为float时,实际值为16777216。我无法弄清楚如何避免这个问题。请注意,我必须使用intfloat,因为我将int传递给fmodf函数,该函数会自动将int参数转换为float。

3 个答案:

答案 0 :(得分:4)

float确实具有有限的位数,因此没有无限精度。

16777217float(IEEE-754 binary32类型)无法精确表示的第一个整数值,它存储为16777216

如果您想要更高的精确度,请使用double

答案 1 :(得分:3)

目前大多数机器都遵循ISO / IEC / IEEE 60559:2011或相同的IEEE-754 floating point标准。

IEEE-754单精度float可以精确地表示最多2^24的整数值,这恰好是16777216

您可以改用doublelong double。例如,IEEE-754双精度double可以表示最多2^53的整数值。 (约10^16

答案 2 :(得分:-3)

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

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

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