繁体   English   中英

C ++ ceil和负零

[英]C++ ceil and negative zero

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

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

我偏爱做一个static_cast<int>(ceil(-0.5)); 但我并不认为这是“最佳做法”。

编辑:您当然可以转换为适当的整数类型(uint64_t,long等)

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

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

转换结果的符号,量化操作,roundToIntegral操作和roundToIntegralExact是第一个或唯一操作数的符号。

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

我不能说我知道它是通常的,但是为了避免打印它,执行检查,如下所示:

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”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM