有没有办法检索后继者或前任某某双?请注意,我不是在寻找像“double.Epsilon”这样的“小常数”,而是“可以从给定值中添加或减去的最小正数”。
答案 0 :(得分:1)
您可以使用二进制表示并将一个添加到小数部分。例如:
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