Jim*_*ker 10 c floating-point ieee-754 c89 floor
在C89中,floor()返回一个double.以下保证是否有效?
double d = floor(3.0 + 0.5);
int x = (int) d;
assert(x == 3);
Run Code Online (Sandbox Code Playgroud)
我担心的是,在IEEE 754中,地板的结果可能并不完全可以表示.所以d得到类似2.99999,而x最终为2.
对于这个问题的答案是肯定的,int范围内的所有整数必须完全可以表示为双精度,而floor必须始终返回该精确表示的值.