最近可能加倍

时间:2014-02-21 11:36:02

标签: c# double

有没有办法检索后继者或前任某某双?请注意,我不是在寻找像“double.Epsilon”这样的“小常数”,而是“可以从给定值中添加或减去的最小正数”。

1 个答案:

答案 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