What is the biggest "no-floating" integer that can be stored in an IEEE 754 double type without losing precision?
In other words, at would the follow code fragment return:
UInt64 i = 0;
Double d = 0;
while (i == d)
{
i += 1;
d += 1;
}
Console.WriteLine("Largest Integer: {0}", i-1);
The biggest/largest integer that can be stored in a double without losing precision is the same as the largest possible value of a double. That is,
DBL_MAXor approximately 1.8 × 10308 (if your double is an IEEE 754 64-bit double). It’s an integer, and it’s represented exactly.What you might want to know instead is what the largest integer is, such that it and all smaller non-negative integers can be stored in IEEE 64-bit doubles without losing precision. An IEEE 64-bit double has 52 bits of mantissa, so it’s 253 (and -253 on the negative side):
Or another way of looking at it: once the bias has been taken off the exponent, and ignoring the sign bit as irrelevant to the question, the value stored by a double is a power of 2, plus a 52-bit integer multiplied by 2exponent − 52. So with exponent 52 you can store all values from 252 through to 253 − 1. Then with exponent 53, the next number you can store after 253 is 253 + 1 × 253 − 52. So loss of precision first occurs with 253 + 1.