gpt4 book ai didi

c# - 将 Double.NaN 与自身进行比较

转载 作者:IT王子 更新时间:2023-10-29 04:01:23 37 4
gpt4 key购买 nike

我一直在试图找出为什么这两个操作返回不同的值:

  1. Double.NaN == Double.NaN 返回 false
  2. Double.NaN.Equals(Double.NaN) 返回 true

我有 answer到第一部分而不是第二部分而不是“为什么这两个比较返回不同的值”

最佳答案

差异的原因很简单,即使不是很明显。

如果使用相等运算符 == ,那么您正在使用 IEEE 测试是否相等。

如果您使用的是 Equals(object)方法,那么你必须维护object.Equals(object)的合约.当您实现此方法(以及相应的 GetHashCode 方法)时,您必须维护该契约,这与 IEEE 行为不同。

如果Equals合约没有得到维护,那么哈希表的行为就会崩溃。

var map = new Dictionary<double,string>();
map[double.NaN] = "NaN";
var s = map[double.NaN];

如果!double.NaN.Equals(double.NaN) ,你永远无法从字典中找到你的值(value)!

如果前面的句子没有意义,那么请理解哈希机制(用于 Dictionary<T,U>HashSet<T> 等)同时使用 object.Equals(object)object.GetHashCode()广泛的方法,并依赖于对其行为的保证。

关于c# - 将 Double.NaN 与自身进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458890/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com