为什么 C 或 C++ “-0” 不会产生浮点 -0?

Why does C or C++ “-0” not produce a floating-point −0?

提问人:Quang Thinh Ha 提问时间:6/2/2022 最后编辑:phuclvQuang Thinh Ha 更新时间:6/3/2022 访问量:89

问:

我正在尝试收集一些浮点运算的边缘情况。问题是,我的尝试并没有向我展示我想要的东西:printf

#include <cmath>
#include <stdio.h>
#include <complex>

int main() {
    double x = -0;
    auto y = sqrt(x);

    printf("x %f y %f \n", x, y);

    return 1;
}

根据 IEEE,是 ,但这会打印出 x 和 y 为 0。squareRoot(-0)-0

关于如何实现我想要的东西有什么建议吗?是通过编译器标志还是其他东西?

C++ 浮点 精度 IEEE-754

评论

0赞 Steve Summit 6/3/2022
您使用的是 C 还是 C++?这种用法看起来更像 C++。在 C 语言中,它会得到一个 ,而不是你想要的。autointdouble

答:

10赞 dbush 6/3/2022 #1

0是一个整数常数,所以也是一个整数,它仍然是 。-00

要获得负零,请使用浮点常量。

double x = -0.0;