Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;ceil与负零_C++_Visual Studio 2008_Floating Point_Ceil - Fatal编程技术网

C++ C++;ceil与负零

C++ C++;ceil与负零,c++,visual-studio-2008,floating-point,ceil,C++,Visual Studio 2008,Floating Point,Ceil,在VC++2008上,ceil(-0.5)正在返回-0.0。这是正常的/预期的行为吗?避免将-0.0打印到i/o流的最佳实践是什么。是,这是常见的 int number = (int) ceil(-0.5); 数字将是0,我不能说我知道这是正常的,但是为了避免打印它,执行一个检查,类似这样: if(var == -0.0) { var = 0.0; } // continue 这是正确的行为。看到和 我喜欢做static_cast(ceil(-0.5))但我并不认为这是“最佳实践”

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

是,这是常见的

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

数字将是0,我不能说我知道这是正常的,但是为了避免打印它,执行一个检查,类似这样:

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

这是正确的行为。看到和

我喜欢做
static_cast(ceil(-0.5))但我并不认为这是“最佳实践”

编辑:您当然可以转换为任何合适的整数类型(uint64\u t、long等)

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

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

CUT< P> <代码> CEI/<代码>来自C++标准库。

C标准规定,如果平台实现IEEE-754算法,
ceil()
的行为就像其参数根据IEEE-754roundToward正数舍入属性被舍入为整数一样。IEEE-754标准规定(第6.3条):

转换结果的符号, 量化操作 roundToIntegral运营,以及 roundToIntegralExact是 第一个或唯一的操作数


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

,显然运算符
=
不区分
-0.0
+0.0
,在这种情况下这并不重要。@Thomasmclod:这是因为根据IEEE754,-0.0==+0.0。请看,此代码段只是用作缓冲区,以确保您没有打印负号。我是以
双精度
输出,而不是强制转换。@ThomasMcLeod如果必须使用
双精度
,则必须接受负零是有效的。如果不希望它打印负号,可以添加如下检查代码
std::cout Right,这是一个固定宽度的浮点输出。我仍然不明白为什么
ceil
应该返回
-0.0
@Chris:这将是
ceil()
@Chris的一个非常奇怪的实现:值得注意的是,您链接的实现实际上不符合IEEE-754(在默认舍入模式下,对于
ceil(-0.5),它将返回
+0.0
,而IEEE-754说结果应该是
-0.0
)。这就是我在原始答案中(算术上不正确)评论中所指的。谢谢你发布这个例子。