Это очень интересно:
float fMax = float.MaxValue;
double dMax = double.MaxValue;
Console.WriteLine("{0}, {1}", fMax == fMax + 1E22f, fMax + 1E22f);
Console.WriteLine("{0}, {1}", fMax == fMax + 1E23f, fMax + 1E23f);
Console.WriteLine("{0}, {1}", dMax == dMax + 1E291d, dMax + 1E291d);
Console.WriteLine("{0}, {1}", dMax == dMax + 1E292d, dMax + 1E292d);
отпечатки:
True, 3.402823E+38
False, 3.402823E+38
True, 1.79769313486232E+308
False, Infinity
Итак, ... как отметил Гуффа, fMax + 1E23f
конвертируется в удвоение, а dMax + 1E292d
складывается в Infinity
.