I wonder if you could explain the Overflow in floating-point types.
float.MaxValue == float.MaxValue + 1 // returns true
That's very interesting:
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);
prints:
True, 3.402823E+38 False, 3.402823E+38 True, 1.79769313486232E+308 False, Infinity
So, ... as Guffa noted fMax + 1E23f is converted to double and dMax + 1E292d adds up to Infinity.