在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/

10-11 22:57