Mishalka2010
Апрель 13, 2016 22:59:24
В общем-то, проблема эта у меня возникала не только в Python, но и в Pascal. Не знал, где спросить, поэтому решил обратиться сюда. После многочисленных операций у меня увеличиваются последние выводимые разряды.
Программа, к примеру:
principal = 1000;
rate = 0.05;
numyears = 5;
year = 1;
while year <= numyears:
principal = principal * (1 + rate);
print(year, principal);
year += 1;
А вывод такой:
1 1050.0
2 1102.5
3 1157.625
4 1215.5062500000001
5 1276.2815625000003
Что может быть не так?
Shaman
Апрель 13, 2016 23:13:23
Проблема из-за приближенного представления процессором рациональных чисел.
principal = 1000
rate = 0.05
numyears = 5
year = 1
while year <= numyears:
principal = round(principal * (1 + rate), 8)
print(year, principal)
year += 1
Mishalka2010
Апрель 13, 2016 23:22:00
Shaman
Проблема из-за приближенного представления процессором рациональных чисел.
А на всех ли процессорах есть такая проблема?
Shaman
Апрель 13, 2016 23:28:25
На всех цифровых. Чтобы очертить рамки возможностей создан стандарт
https://ru.wikipedia.org/wiki/IEEE_754-2008