【问题标题】:Does C# (.Net) differentiate between signaling and quiet NaNs?C# (.Net) 是否区分信号和安静的 NaN?
【发布时间】:2015-06-19 20:10:00
【问题描述】:

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

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

【问题讨论】:

  • 相当肯定答案是否定的,C# 只有一种 NaN 类型并且它是常量。

标签: c# .net nan


【解决方案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;
        }
        // ...
    }
    

【讨论】:

  • 很难证明某事不存在。以下是一些没有找到的地方。
猜你喜欢
  • 2015-02-25
  • 2012-01-01
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多