用于负零浮点值?

cat*_*_cd 21 c++ floating-point ieee-754

考虑以下C++代码:

double someZero = 0;
std::cout << 0 - someZero << '\n';   // prints 0
std::cout << -someZero << std::endl; // prints -0
Run Code Online (Sandbox Code Playgroud)

问题出现了:什么是负零好处,应该是防御性的避免(即使用减法而不是减去变量)?

NPE*_*NPE 21

来自维基百科:

据称,在IEEE 754中包含有符号零点可以更容易地在一些关键问题中实现数值精度[1],特别是在使用复杂的基本函数进行计算时[2].

第一个参考文献是W. Kahan撰写的"复杂基本功能的分支削减或许多无关的标志位",可在此处下载.

从纸的一个例子是1/(+0)VS 1/(-0).在这里,零的符号产生巨大的差异,因为第一个表达式等于+inf第二个,-inf.