gpt4 book ai didi

floating-point - 负零的平方根

转载 作者:行者123 更新时间:2023-12-04 07:23:32 25 4
gpt4 key购买 nike

在 g++ 4.8.0 版(32 位 mingw)下,-0.0(二进制表示 0x80000000000000000)的平方根是 NAN。但我可以发誓,早期版本(我不确定是哪个,但我上次运行完整测试套件时)只返回 0.0,这对我来说似乎更明智。

这是正确的吗? C++ 标准中的某些内容发生了变化,还是 g++ 发生了变化?

最佳答案

这是 MinGW 环境的一种非标准*行为(我也间接地通过我为其工作的软件出乎意料地失败的客户观察到了这种行为)。

您可能已经看到 sqrt(-0.) 的正确结果,即 -0. ,具有更高的优化级别,在编译时正确计算值,或者使用不存在错误的先前版本的运行时。

我最终定义了我自己的“固定”sqrt()作为:

double mysqrt(double x) {
if (x == 0.) return x; else return sqrt(x);
}

(*) IEEE 754 定义 sqrt(-0.)-0. . C 或 C++ 编译器不必为浮点运算实现 IEEE 754,但 GCC 会尝试(并且在此特定实例中失败)。

关于floating-point - 负零的平方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com