0
有没有办法检索继任者或前任某种双重?请注意,我不是在寻找像double.Epsilon这样的“小常量”,而是“可以从给定值添加或减去的最小正数”。最近可能的双倍
有没有办法检索继任者或前任某种双重?请注意,我不是在寻找像double.Epsilon这样的“小常量”,而是“可以从给定值添加或减去的最小正数”。最近可能的双倍
你可以采取二进制表示,并添加一个小数部分。例如:
using System;
public class Test
{
static void DoubleTest(double value)
{
var binary = BitConverter.DoubleToInt64Bits(value);
binary++;
var newValue = BitConverter.Int64BitsToDouble(binary);
var difference = newValue - value;
Console.WriteLine("value = {0:R}", value);
Console.WriteLine("value' = {0:R}", newValue);
Console.WriteLine("dx = {0:R}", difference);
Console.WriteLine();
}
public static void Main()
{
DoubleTest(0.0000000004);
DoubleTest(4.0000000000);
DoubleTest(4000000000.0);
}
}
打印:
value = 4E-10
value' = 4.0000000000000007E-10
dx = 5.169878828456423E-26
value = 4
value' = 4.0000000000000009
dx = 8.8817841970012523E-16
value = 4000000000
value' = 4000000000.0000005
dx = 4.76837158203125E-07
有时没有下一个值,你应该处理负值,但我喜欢这个想法 –
是的,有几个案件没有处理。但这是一个普遍的想法。 –
我认为C#使用常规的(标准化)浮点运算,所以从它的位形成可以产生最值的后续和前趋值。 –