9 .net math floating-point double nan
Math.Max(1f, float.NaN) == NaN
new[] { 1f, float.NaN }.Max() == 1f
Run Code Online (Sandbox Code Playgroud)
为什么?
编辑:同样的问题也加倍!
正如其他人所发布的,我在推特上发布了一种“为什么”——因为它IComparable
按照记录使用。
但这只会导致另一个“为什么”。尤其:
Console.WriteLine(Math.Max(0, float.NaN)); // Prints NaN
Console.WriteLine(0f.CompareTo(float.NaN)); // Prints 1
Run Code Online (Sandbox Code Playgroud)
第一行表明 NaN 被视为大于 0。第二行表明 0 被视为大于 NaN。(当然,这些都不能报告“这种比较没有意义”的结果。)
这可能看起来很不寻常,但这是正确的答案。当且仅当所有元素均为 NaN 时,数组的 max() 为 NaN。请参阅 IEEE 754r。
此外,Math.Max 使用 IEEE 754r 总排序谓词,它指定 NaN 与其他的相对排序。