在C89中,floor()返回一个double.以下保证工作吗?
double d = floor(3.0 + 0.5);
int x = (int) d;
assert(x == 3);
我的担心是,在IEEE 754中,结果可能无法正确表示.所以d得到的东西像2.99999,x最终为2.
对于这个问题的答案是肯定的,int范围内的所有整数都必须是双精度的,而floor必须总是返回正确表示的值.
如果您的浮点型
支持所需的尾数位,所有整数都可以具有精确的浮点表示.由于双重使用53位尾数,它可以准确地存储所有32位int.毕竟,您可以将该值设置为零指数的尾数.