Интересно, не могли бы вы объяснить переполнение в типах с плавающей запятой.
float.MaxValue == float.MaxValue + 1 // returns true