关于浮点转换的假设:(int)(float)n == n

时间:2014-01-03 09:23:00

标签: c ieee-754 floating-point-conversion

我可以假设任何(int)(float)n == n int n?至少我需要这个非负的31位值。

附录。 (int)(double)n ==n怎么样?

1 个答案:

答案 0 :(得分:11)

不,你不能。对于无法由int完全表示的float,这将失败。

(原因:float通常是一个32位的IEEE-754浮点值。它只有24位的精度,其余的是为指数和符号保留的。所以如果你的整数有更重要的二进制数字而不是23,并且它不会恰好是2的适当幂的倍数,那么它不能精确地表示为float。)

  

附录。那么(int)(double)n == n?

它是一样的。对于无法表示为int的{​​{1}},比较并不总是为真。但是,通常double不足以实现这一点 - 广泛接受的int实现是64位IEEE-754浮点数,其精度为53位,而{ {1}} s往往最多为32位。但您可以尝试使用doubleintlong来重复实验。

这是一个演示:

long long

打印:

double