提问人:Dave 提问时间:3/20/2018 最后编辑:fuboDave 更新时间:3/20/2018 访问量:93
什么是 MS 其他有用的代码片段中的“单位”HasMinimalDifference 用于双重相等
What is "unit" in MS's otherwise useful snippet HasMinimalDifference for double equality
问:
Double.Equals 的文档包含一个有用的方法
public static bool HasMinimalDifference(double value1, double value2, int units)
{
long lValue1 = BitConverter.DoubleToInt64Bits(value1);
long lValue2 = BitConverter.DoubleToInt64Bits(value2);
// If the signs are different, return false except for +0 and -0.
if ((lValue1 >> 63) != (lValue2 >> 63))
{
if (value1 == value2)
return true;
return false;
}
long diff = Math.Abs(lValue1 - lValue2);
if (diff <= (long)units)
return true;
return false;
}
这似乎是测试两个双精度值“相等”的推荐方法。
但是,尽我所能,我无法弄清楚第三个论点的目的,单位。在给出的示例中,传递了值 1,并且没有给出其存在的其他解释。
谁能澄清一下?
答: 暂无答案
评论
units
HasMinimalDifference(0.0, 1E-323, 2)
true
HasMinimalDifference(-0.0, 1E-323, 200000)
false
0.0 == -0.0