【发布时间】:2015-06-19 20:10:00
【问题描述】:
C# 是否区分信令和静默 NaN?
如果是这样,我如何调用两者并检查属性?
【问题讨论】:
-
我相当肯定答案是否定的,C# 只有一种 NaN 类型并且它是常量。
C# 是否区分信令和静默 NaN?
如果是这样,我如何调用两者并检查属性?
【问题讨论】:
没有。我在规范或代码中找不到对 Quiet 或 Signaling NaN 的任何引用。
规范没有提到不同的 NaN 类型。来自4.1.6 Floating point types:
Not-a-Number 值,通常缩写为 NaN。 NaN 是由无效的浮点运算产生的,例如将零除以零。
源代码中的几个例子:
public const double NaN = (double)0.0 / (double)0.0;
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;
}
// ...
}
【讨论】: