visual studio 2008 - C++ ceil and negative zero

visual studio 2008 - C++ ceil and negative zero

本文关键字:and negative zero ceil C++ studio 2008 visual      更新时间:2023-10-16

在VC++ 2008上,ceil(-0.5)返回-0.0。这是通常/预期的行为吗?避免将-0.0打印到 I/O 流的最佳做法是什么。

C++中的ceil来自C标准库。

C标准说,如果一个平台实现了IEEE-754算术,ceil( )的行为就好像它的参数根据IEEE-754 roundTowardPositive 舍入属性被四舍五入为整数。 IEEE-754标准说(条款6.3):

转换结果的符号, 量化操作, 圆到积分运算,以及 roundtoIntegralExact 是 第一个或唯一的操作数。

因此,结果的符号应始终与输入的符号匹配。 对于范围为 (-1,0) 的输入,这意味着结果应该是-0.0

这是

正确的行为。 请参阅零值上的一元运算符-() - c++ 和 http://en.wikipedia.org/wiki/Signed_zero

我偏向于做一个static_cast<int>(ceil(-0.5));但我不声称这是"最佳实践"。

编辑:您当然可以转换为任何合适的积分类型(uint64_t,长等)

我不能说我知道这是通常的,但至于避免打印它,实现一个检查,如下所示:

if(var == -0.0)
{
    var = 0.0;
}
// continue

是的,这很常见。

int number = (int) ceil(-0.5);

数字将为 0

我明白为什么ceil(-0.5)返回-0.0.这是因为对于负数,ceil返回操作数的整数部分:

double af8IntPart;
double af8FracPart = modf(-0.5, & af8IntPart);
cout << af8IntPart;

此处的输出为"-0.0"