gpt4 book ai didi

double.NaN - 这个违反直觉的功能是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 18:38:14 26 4
gpt4 key购买 nike

我偶然发现了 .NET 对 double.NaN 的定义在代码中:

public const double NaN = (double)0.0 / (double)0.0;

这在 PositiveInfinity 中也是类似的。和 NegativeInfinity .

double.IsNaN (删除一些#pragmas 和注释)定义为:
[Pure] 
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static bool IsNaN(double d)
{
if (d != d)
{
return true;
}
else
{
return false;
}
}

这对我来说非常违反直觉。

为什么 NaN 被定义为除以零?怎么样 0.0 / 0.0代表“幕后”?如何在 double 中除以 0 ,以及为什么 NaN != NaN ?

最佳答案

这里相当简单的答案。 .Net框架已经实现了IEEE规定的浮点标准( System.Double complies with the IEC 60559:1989 (IEEE 754) standard for binary floating-point arithmetic.) .这是因为浮点运算实际上必须在许多系统上工作,而不仅仅是 x86/64 架构,所以通过遵循约定,这可以确保兼容性问题更少(例如将代码从 DSP 移植到 x86 处理器)。

至于 d != d,这是一个性能优化。基本上这条指令依赖于硬件指令,该指令可以非常快速地确定两个双浮点数是否相等。在标准下,NAN != NAN 因此是最快的测试方式。试图为你找到一个引用。

关于double.NaN - 这个违反直觉的功能是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531415/

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