Floating point precision while using Python's max()

后端 未结 4 1376
野趣味
野趣味 2020-12-12 02:51

Why so?

>>> max(2, 2.01)
2.0099999999999998
相关标签:
4条回答
  • 2020-12-12 03:09

    because:

    >>> 2.01
    2.0099999999999998
    

    it's the way floating point numbers are stored

    0 讨论(0)
  • 2020-12-12 03:11

    Floating point numbers do not encode exact values, but approximations. The result is essentially the next nearest floating point number to the real number you entered.

    http://docs.python.org/tutorial/floatingpoint.html

    0 讨论(0)
  • 2020-12-12 03:26

    Floating point roundoff. Its trying to say 2.01 but can't express it exactly as a floating point number so its doing the best it can.

    0 讨论(0)
  • 2020-12-12 03:31

    The number 2.01 represented in binary is:

    b10.00000010100011111100001010001111110000101000111111000010100011111100...
    

    The computer uses only a finite number of digits to store floating-point values, but the binary representation of 2.01 requires infinitely many digits; as a result, it is rounded to the closest representable value:

    b10.000000101000111111000010100011111100001010001111110
    

    Expressed in decimal, this number is exactly:

    2.0099999999999997868371792719699442386627197265625
    

    When you print it out, it is rounded a second time to seventeen decimal digits, giving:

    2.0099999999999998
    
    0 讨论(0)
提交回复
热议问题