C#(。Net)是否区分信令和安静的NaN?

时间:2015-04-14 09:18:10

标签: c# .net nan

C#是否区分信令和安静的NaN?

如果是这样,我如何调用两者并检查属性?

1 个答案:

答案 0 :(得分:1)

没有。我在规范或代码中找不到任何对Quiet或Signaling NaN的引用。

规范没有提到不同的NaN类型。来自4.1.6 Floating point types

  

Not-a-Number值,通常缩写为NaN。 NaN由无效的浮点运算产生,例如将零除零。

源代码中的一些示例:

  • Double.NaN

    public const double NaN = (double)0.0 / (double)0.0;
    
  • Double.IsNaN

    return (*(UInt64*)(&d) & 0x7FFFFFFFFFFFFFFFL) > 0x7FF0000000000000L;
    
  • Math.IEEERemainder(double x, double y)

    public static double IEEERemainder(double x, double y) {
        if (Double.IsNaN(x)) {
            return x; // IEEE 754-2008: NaN payload must be preserved
        }
        if (Double.IsNaN(y)) {
            return y; // IEEE 754-2008: NaN payload must be preserved
        }
    
        double regularMod = x % y;
        if (Double.IsNaN(regularMod)) {
            return Double.NaN;
        }
        // ...
    }