1 - 3.377852191807931e-49 * 0.1 * 1 = 1.0
запись
3.3e-49
означает 3.3 умножить на 10 в –49-й степени. Т.е. какое-то очень малое число.
Потом домножают на 0.1, получается вообще в –50-й:
0.(50 нулей)33
Без специальных библиотек вычисления с дробными числами выполняются с небольшими округлениями. Это неизбежно из-за двоичной системы исчисления и «всего лишь» 16-, 32- или 64-битного ограничения на запись числа. Отсюда парадокс:
>>> 0.1 + 0.2
0.30000000000000004
Как видите, ошибка округления
4e-16
. А уж числа порядка
1e-50
тем более пропадут и будут считаться за ноль.