ошибка при поиске четных чисел в Python
Пытаюсь проверить являются ли числа чётными, но с определённого числа начинаются несоответствия, например если разделить чётное число на 2 с остатком и без остатка не соблюдается равенство?
37889062373143906/2 == 37889062373143906//2
Хотя разность этих чисел равна нулю
37889062373143906/2 - 37889062373143906//2
Ответы (1 шт):
При обычном делении (и при вычитании) в Python числа всегда приводятся к типу float (число двойной точности). А при целочисленном — не приводятся и остаются в классе int (число бесконечной точности).
На платформах IEEE 754 мантисса чисел двойной точности содержит 53 бита:
import sys
sys.float_info.mant_dig # 53
Но Ваше число содержит 54 бита (55 после деления - 1 подразумевающийся). Таким образом, число просто не помещается в мантиссу и округляется, из-за чего Вы получаете неточный результат.
Проверяйте на чётность по остатку от деления на 2:
num % 2 == 0