c# - 为什么在 C# 中使用 float.NaN != double.NaN?

标签 c# .net nan

为什么 float.NaN != double.NaN

float.PositiveInfinity == double.PositiveInfinityfloat.NegativeInfinity == double.NegativeInfinity 相等

示例:

bool PosInfinity = (float.PositiveInfinity == double.PositiveInfinity); //true
bool NegInfinity = (float.NegativeInfinity == double.NegativeInfinity); //true

bool isNanEqual = (float.NaN == double.NaN);  //false, WHY?

最佳答案

NaN 永远不会等于 NaN(即使在同一类型中)。因此为什么 IsNaN函数存在:

Double zero = 0;
// This will return true.
if (Double.IsNaN(0 / zero)) 
{
    Console.WriteLine("Double.IsNan() can determine whether a value is not-a-number.");
}

您还应该知道,您显示的所有比较都不是“按原样”实际发生的。当您编写 floatValue == doubleValue 时, float 实际上会在比较发生之前隐式转换为 double 值。

关于c# - 为什么在 C# 中使用 float.NaN != double.NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208967/

相关文章:

.net - 在 SSH.NET 中更改 key 交换方法

java - 如何在 Java/Android 中检查一个数字是否为 "NaN"?

c# - View 中的 ASP.Net 5 rc1 本地化

c# - 如何在 C# 中更改 Sqlite 数据库的 "journal_mode"

c# - 如何使用 GitHub DB API 提交对文件的更改

c# - 存储大前缀树的最佳方式

python - 使用缺失值计算 scipy 中的成对距离

python - 将包含 NaN 值的整个 Pandas 数据框从字符串转换为 float

c# - WPF 和 Prism 的通用对话框窗口

c# - IEnumerable 集合中元素的序号位置 (Linq to XMl )