IEEE 754标准将负零的平方根定义为负零.这种选择很容易合理化,但其他选择(如定义sqrt(-0.0)为NaN)也可以合理化,并且更容易在硬件中实现.如果担心程序员会编写if (x >= 0.0) then sqrt(x) else 0.0并被这个表达式判断为何NaN时x被评估-0.0,那么sqrt(-0.0)就可以将其定义为+0.0(实际上,对于这个特定的表达式,结果会更加一致).
是否存在特定的数值算法,其中sqrt(-0.0)定义为-0.0简化算法本身的逻辑?
编译好了
#include <math.h>
int main(void) {
double i = sqrt(9.0);
}
Run Code Online (Sandbox Code Playgroud)
如果我将9.0更改为-9.0,那么我的编译器(GNU C)会给出关于'sqrt'的未定义引用的错误.
我期待sqrt函数返回NaN或异常.C库如何仅为非负参数定义sqrt?