>>> (float('inf')+0j)*1
(inf+nanj)
Run Code Online (Sandbox Code Playgroud)
为什么?这在我的代码中造成了一个讨厌的错误。
为什么1乘法身份不给(inf + 0j)?
基于"IEEE"规范:"当输入或结果是NaN时,该标准不解释NaN的符号." 然而,printf版画NaN值签署:nan或-nan
(?从SPEC)有人点我的一套规则时nan,当-nan印刷例如,我检查了printf(-1.0f)打印-nan
谢谢
我有这个代码:
#include <iostream>
int main()
{
double A = 1e3000000;
double B = 0;
double C = A * B;
std::cout << "A = " << A << "\n";
std::cout << "B = " << B << "\n";
std::cout << "C = " << C << "\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
A = inf
B = 0
C = -nan
Run Code Online (Sandbox Code Playgroud)
为什么C为负值?我用 clang 17 和在线 C++ 编译器对此进行了测试。
我从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;
}
Run Code Online (Sandbox Code Playgroud)
但这还不足以满足我的逻辑..