我可以假设任何(int)(float)n == n
int n
?至少我需要这个非负的31位值。
附录。 (int)(double)n ==n
怎么样?
答案 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位。但您可以尝试使用double
或int
和long
来重复实验。
这是一个演示:
long long
打印:
double