相关疑难解决方法(0)

+0.0和-0.0上的哪些操作和功能会产生不同的算术结果?

在C中,当±0.0支持-0.0+0.0分配给a时double通常不会产生算术差异.尽管它们具有不同的位模式,但它们在算术上比较相同.

double zp = +0.0;
double zn = -0.0;
printf("0 == memcmp %d\n", 0 == memcmp(&zn, &zp, sizeof zp));// --> 0 == memcmp 0
printf("==          %d\n", zn == zp);                        // --> ==          1
Run Code Online (Sandbox Code Playgroud)

受到@Pascal Cuoq评论的启发,我正在寻找标准C中的一些功能,这些功能提供了算术上不同的结果.

注意:许多功能,如sin(),返回+0.0f(+0.0)-0.0f(-0.0).但这些并不能提供不同的算术结果.这两个结果也不应该同时存在NaN.

c floating-point

20
推荐指数
2
解决办法
1003
查看次数

负零(-0.0)与正零(+0.0)相比的行为

在我的代码中,

float f = -0.0; // Negative 
Run Code Online (Sandbox Code Playgroud)

并与负零相比

f == -0.0f
Run Code Online (Sandbox Code Playgroud)

结果将是true.

float f = 0.0; // Positive
Run Code Online (Sandbox Code Playgroud)

并与负零相比

f == -0.0f
Run Code Online (Sandbox Code Playgroud)

另外,结果将是true代替false

为什么在这两种情况下都是真的?


这是一个测试它的MCVE(住在coliru上):

#include <iostream>

int main()
{
    float f = -0.0;

    std::cout<<"==== > " << f <<std::endl<<std::endl;

    if(f == -0.0f)
    {
        std::cout<<"true"<<std::endl;
    }
    else
    {
        std::cout<<"false"<<std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

==== > -0  // Here print negative zero

true
Run Code Online (Sandbox Code Playgroud)

c++ floating-point ieee-754

11
推荐指数
3
解决办法
6574
查看次数

标签 统计

floating-point ×2

c ×1

c++ ×1

ieee-754 ×1