Точность с плавающей точкой при использовании Python max () - PullRequest
2 голосов
/ 18 апреля 2011

Почему так?

>>> max(2, 2.01)
2.0099999999999998

Ответы [ 4 ]

5 голосов
/ 18 апреля 2011

Число 2.01, представленное в двоичном виде:

b10.00000010100011111100001010001111110000101000111111000010100011111100...

Компьютер использует только конечное число цифр для хранения значений с плавающей точкой, но двоичное представление 2.01 требует бесконечного числа цифр; в результате значение округляется до ближайшего представимого значения:

b10.000000101000111111000010100011111100001010001111110

В десятичном выражении это число равно:

2.0099999999999997868371792719699442386627197265625

Когда вы распечатываете, он округляется во второй раз до семнадцати десятичных цифр, давая:

2.0099999999999998
3 голосов
/ 18 апреля 2011

Числа с плавающей запятой кодируют не точные значения, а приблизительные значения.Результатом является, по сути, следующее число, ближайшее к числу с плавающей запятой, к введенному вами действительному числу.

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

2 голосов
/ 18 апреля 2011

, потому что:

>>> 2.01
2.0099999999999998

это способ хранения чисел с плавающей запятой

0 голосов
/ 18 апреля 2011

округление числа с плавающей точкой. Он пытается сказать 2.01, но не может выразить его в точности как число с плавающей запятой, поэтому он делает все возможное.

...