相关疑难解决方法(0)

下一个更高/更低的IEEE双精度数

我正在进行高精度的科学计算.在寻找各种效果的最佳表示时,我不断提出想要获得下一个更高(或更低)双精度数的理由.基本上,我想要做的是在double的内部表示中添加一个最低有效位.

难点在于IEEE格式不完全一致.如果要使用低级代码并实际将一个代码添加到最低有效位,则生成的格式可能不是下一个可用的双精度型.例如,它可能是一个特殊的案例编号,例如PositiveInfinity或NaN.还有一些次正常值,我不认为这些值,但它们似乎具有与"正常"模式不同的特定位模式.

可以使用"epsilon"值,但我从未理解其定义.由于double值不是均匀间隔,因此不能将单个值添加到double以产生下一个更高的值.

我真的不明白为什么IEEE没有指定一个函数来获得下一个更高或更低的值.我不可能是唯一需要它的人.

有没有办法获得下一个值(没有某种类型的循环尝试添加更小和更小的值).

double ieee-754 floating-point-precision

21
推荐指数
4
解决办法
2991
查看次数

比较与Double.MaxValue

当比较不同的大双打时,会发生以下测试失败:

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

意识到双精度表示为尾数,指数和符号位,这是因为值Double.MaxValue - 10000实际上与Double.MaxValue(这些值相等)的表示方式相同.

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

c# double floating-accuracy

2
推荐指数
1
解决办法
561
查看次数