Where do I find the machine epsilon in C#?
It's(on my machine):
1.11022302462516E-16
You can easily calculate it:
double machEps = 1.0d;
do {
machEps /= 2.0d;
}
while ((double)(1.0 + machEps) != 1.0);
Console.WriteLine( "Calculated machine epsilon: " + machEps );
Edited:
I calcualted 2 times epsilon, now it should be correct.
Just hard-code the value:
const double e1 = 2.2204460492503131e-16;
or use the power of two:
static readonly double e2 = Math.Pow(2, -52);
or use your definition (more or less):
static readonly double e3 = BitConverter.Int64BitsToDouble(BitConverter.DoubleToInt64Bits(1.0) + 1L) - 1.0;
And see Wikipedia: machine epsilon.
The Math.NET library defines a Precision class, which has a DoubleMachineEpsilon property.
You could check how they do it.
According to that it is:
/// <summary>
/// The base number for binary values
/// </summary>
private const int BinaryBaseNumber = 2;
/// <summary>
/// The number of binary digits used to represent the binary number for a double precision floating
/// point value. i.e. there are this many digits used to represent the
/// actual number, where in a number as: 0.134556 * 10^5 the digits are 0.134556 and the exponent is 5.
/// </summary>
private const int DoublePrecision = 53;
private static readonly double doubleMachinePrecision = Math.Pow(BinaryBaseNumber, -DoublePrecision);
So it is 1,11022302462516E-16
according to this source.