Ton*_*nyK 8 floating-point g++4.8
在g ++版本4.8.0(32位mingw)下,-0.0(二进制表示0x8000000000000000)的平方根为NAN.但是我可以发誓早期版本(我不确定哪个,但是我最后一次运行我的完整测试套件)只返回0.0,这对我来说似乎更明智.
这是正确的吗?C++标准中的某些内容是否已更改,或者这是一个g ++更改?
这是MinGW环境的非标准*行为(我也间接地通过我所工作的软件意外失败的客户观察到).
您可能已经看到了正确的结果sqrt(-0.),即-0.,在编译时正确计算值的更高优化级别,或者没有错误的运行时的先前版本.
我最终将自己的"固定"定义sqrt()为:
double mysqrt(double x) {
if (x == 0.) return x; else return sqrt(x);
}
Run Code Online (Sandbox Code Playgroud)
(*)IEEE 754定义sqrt(-0.)为-0..AC或C++编译器不必为浮点运算实现IEEE 754,但GCC尝试(在此特定情况下,失败).