floor()是否返回正确可表示的内容?

在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.毕竟,您可以将该值设置为零指数的尾数.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...