2014-02-21 25 views
0

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

+0

我认为C#使用常规的(标准化)浮点运算,所以从它的位形成可以产生最值的后续和前趋值。 –

回答

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 
+0

有时没有下一个值,你应该处理负值,但我喜欢这个想法 –

+0

是的,有几个案件没有处理。但这是一个普遍的想法。 –