gpt4 book ai didi

c# - 与 Double.MaxValue 的比较

转载 作者:行者123 更新时间:2023-12-02 12:27:43 24 4
gpt4 key购买 nike

当比较变大的 double 时,以下测试会失败:

[Test]
public void DoubleMaxValueTest()
{
double val = Double.MaxValue;
double epsilon = 10000.0;
Assert.IsTrue(val > (Double.MaxValue - epsilon));
}

请注意, double 表示为尾数、指数和符号位,这是因为值 Double.MaxValue - 10000 实际上与 Double.MaxValue 的表示方式相同(这些值相等)。

问题是:如何获得此测试返回 true 的最小 epsilon?

最佳答案

回答最后问题,因为听起来您确实了解测试失败的原因......

IEEE-754 有一个巧妙的属性,如果您采用相邻的按位值,那么这些值最终会成为相邻的可表示的 double 值。因此,您可以通过将 MaxValue 的位模式视为整数,减去 1,并将结果返回为 double,找到“第二高”可表示的 double :

using System;

class Test
{
static void Main()
{
long maxDoubleBits = BitConverter.DoubleToInt64Bits(Double.MaxValue);
double nextLargestDouble = BitConverter.Int64BitsToDouble(maxDoubleBits - 1);
double difference = double.MaxValue - nextLargestDouble;
Console.WriteLine(difference);
}
}

结果是1.99584030953472E+292

现在,该差异是 MaxValue 与下一个最高值之间的实际差异。因此,您可以从 double.MaxValue 中减去以获得不是的值的最小量,MaxValue 实际上是 difference/2 .

关于c# - 与 Double.MaxValue 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26442078/

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