Why [float.MaxValue == float.MaxValue + 1] does return true?

后端 未结 5 1306
太阳男子
太阳男子 2020-12-06 09:07

I wonder if you could explain the Overflow in floating-point types.

float.MaxValue == float.MaxValue + 1 // returns true
5条回答
  •  臣服心动
    2020-12-06 09:38

    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.

提交回复
热议问题