gpt4 book ai didi

c# - 为什么 double.IsNegative(double.NaN) 返回 true?

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

为什么double.IsNegative(double.NaN)意外返回truedouble.NaN < 0返回 false正如预期的那样?

最佳答案

嗯,根据refrence source , double.IsNegative只需检查 最高有效位 :

    [Pure]
[System.Security.SecuritySafeCritical] // auto-generated
internal unsafe static bool IsNegative(double d) {
return (*(UInt64*)(&d) & 0x8000000000000000) == 0x8000000000000000;
}
如果是 double.NaN最重要的一点 已设置 :
    11111111 11111000 00000000 00000000 00000000 00000000 00000000 00000000   
|| || |
|<- Exp -><- Mantissa ->
Sign
这就是为什么 double.IsNegative返回 true当我们放 <>使用 FPU 命令,它知道所有的指数是一种特殊的浮点值,应该以特殊的方式处理。
Single.NaN 完全相同的图片.
请注意,我们可以构造另一个奇怪的值,负零:
    10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000   
|| || |
|<- Exp -><- Mantissa ->
Sign
请看:
  double negativeZero = BitConverter.ToDouble(new byte[] { 
0, 0, 0, 0, 0, 0, 0, 128
});

Console.WriteLine(negativeZero == 0 ? "Zero" : "???");

Console.WriteLine(double.IsNegative(negativeZero) ? "Negative" : "???");

关于c# - 为什么 double.IsNegative(double.NaN) 返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67626067/

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