IEEE浮点标准是什么(+0)+( - 0)?

se0*_*808 11 c++ floating-point ieee-754

我是对的,对任何浮点数的任何算术运算都是由IEEE浮点标准明确定义的吗?如果是的话,只是出于好奇,那是(+0)+(-0)什么?有没有办法在实践中用C++或其他常用的编程语言来检查这些东西?

Tav*_*nes 16

用于签名零的IEEE 754算术规则+0.0 + -0.0取决于舍入模式.在默认的舍入模式中,它将是+0.0.当向-∞舍入时,它将是-0.0.

你可以用C++来检查这个:

#include <iostream>

int main() {
    std::cout << "+0.0 + +0.0 == " << +0.0 + +0.0 << std::endl;
    std::cout << "+0.0 + -0.0 == " << +0.0 + -0.0 << std::endl;
    std::cout << "-0.0 + +0.0 == " << -0.0 + +0.0 << std::endl;
    std::cout << "-0.0 + -0.0 == " << -0.0 + -0.0 << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

+0.0 + +0.0 == 0
+0.0 + -0.0 == 0
-0.0 + +0.0 == 0
-0.0 + -0.0 == -0
Run Code Online (Sandbox Code Playgroud)

  • 喜欢[this](http://stackoverflow.com/a/6867722/502399).不幸的是,大多数编译器在优化常量表达式时会忽略舍入模式,例如`+0.0 + -0.0`(参见[GCC bug 34678](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34678)) . (2认同)