为什么0.0/0.0在C++中使nan为负数?

我从SoloLearn 中发现了以下内容:

我发现 0.0/0.0 使负 nan(-nan)。对我来说,这样的数学结果未定义或“不是数字”是有道理的。[...]

此外,为什么-nan+2^nan=nan?

例如:

#include <iostream>
using namespace std;

int main() {
    cout<<0.0/0.0<<endl;
    cout<<"important "+to_string(1.0/0.0)+"o:"<<endl;
    cout<<"ba"+to_string(0.0/0.0*-1)+"a"<<endl;
    cout<<(0.0/0.0)+2^(0.0/0.0*-1);//-nan+2^nan=nan
    return 0;
}

但这还不足以满足我的逻辑..

回答

就 C++ 语言而言,程序的行为是未定义的。因此,从 C++ 的角度来看,程序的行为没有任何“理由”。

根据 IEEE-754 浮点标准,假设您的硬件和语言实现符合它(他们可能会这样做),这种除法的结果是 NaN。IEEE-754 没有为任何操作指定 NaN 的符号。因此,从 IEEE-754 的角度来看,答案是:由于语言/硬件实现选择的任何原因(或只是没有特殊原因),它恰好在您的系统上如此。

总而言之:您永远不应该依赖 NaN 的特殊符号。您通常应该避免除以零。


以上是为什么0.0/0.0在C++中使nan为负数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>