Делаяю различные математические вычисления наткнулся на интересный факт в питоне.
print (round(2.5))
>>> 2
print (round(1.5))
>>> 2
print (round(0.5))
>>> 0
Почему значение 1.5 округляется вверх, когда остальные два округляются вниз? Тестировал на других числах. Вывел что числа в (примерном) диапазоне:
[1.499999999999999889, 2.50000000000000022202]
округляются до 2. При этом диапазон округлениея к 1 (примерно) равен:
[0.500000000000000055511151231257827025, 1.4999999999999998889]
Диапазон 2 "значительно" (если это можно сказать про такие мелкие доли) больше 1.
Для моих вычисление это не критично, но я всегда считал, что компьютер строго округляет половину в какую либо одну сторону. Какова философия за этим явлением?
Перелом нулей и девяток случается на 16 бите, т.е. это видимо как-то связано с величиной экспонета double и невозможнотью определять более точные числа, это я могу понять.
Но почему round(2.5) и round(1.5) равны 2 - недочет разработчиков?