[英]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.