Когда А больше или равно В, но А минус В больше 0?
Есть два числа А и В. Программа выдала такой результат:
А-В>=0 True
A>=В False
При каких значениях A и B такое может быть?
Ответы (1 шт):
Автор решения: nomnoms12
Поведение связано с типами чисел. Одно число представлено как
→ Ссылка
Чёрная магия:
A = 9007199254740992.0
B = 9007199254740993
print(A - B >= 0) # True
print(A >= B) # False
Поведение связано с типами чисел. Одно число представлено как
int и имеет бесконечную точность в Python, а второе — как float, и его точность зависит от платформы.
На платформах IEEE 754 мантисса чисел двойной точности содержит 53 бита:
import sys
sys.float_info.mant_dig # 53
Поэтому некоторые числа не могут быть точно представлены и округляются:
x = 1 << 53 # 9007199254740992
y = float(x) # 9007199254740992.0
z = float(x + 1) # 9007199254740992.0
y == z # True
Округление (из-за приведения типа) происходит при любых математических операциях, если хотя бы один из операндов имеет тип float:
9007199254740992.0 - 9007199254740993
9007199254740992.0 - 9007199254740992.0 = 0
Но сравнение выполняется математически точно, приведение типов не требуется.