在C89中,floor()返回一个double。可以保证以下工作吗?
double d = floor(3.0 + 0.5);
int x = (int) d;
assert(x == 3);
我担心的是floor的结果可能无法在IEEE 754中精确表示。因此d得到的像是2.99999,x最终是2。
为了使该问题的答案为是,必须将int范围内的所有整数精确地表示为double,并且floor必须始终返回该精确表示的值。
最佳答案
如果您的浮点类型支持所需的尾数位,则所有整数都可以具有精确的浮点表示形式。由于double
使用53位尾数,因此它可以完全存储所有32位int
。毕竟,您可以将值设置为零指数尾数。
关于c - floor()是否返回可精确表示的内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/440204/