0

print ((3.14+0.3)/2+0.15) = 1.8666666669 А если вручную пересчитать, то получается 1.87

Elena
  • 1
  • 1
    Все он верно вычисляет, округлите до двух знаков после запятой и выйдет ваш ответ – Сергей Махнёв Oct 06 '21 at 12:49
  • Типичная проблема потери точности при операциях с float. Используйте Decimal – vitidev Oct 06 '21 at 12:50
  • А почему при ручном расчете получается так, а в интерпретаторе получается такое большое число? Это понятно что можно округлить, но вот не знаю с чем это связано( – Elena Oct 06 '21 at 12:50
  • 1
    Связано это с тем что float в двоичном представлении не может быть представлен точно, всегда есть погрешность. И поэтому 1.1 + 2.2 = 3.3000000000000003 – vitidev Oct 06 '21 at 12:53
  • Используйте round: n = (3.14+0.3)/2+0.15 print(n) print(round(n, 2)) – gil9red Oct 06 '21 at 12:55
  • И никого из комментаторов не смутила такая гигантская погрешность? Я вот не поверил, посмотрел сам, получил 1.8699999999999999. Вот это куда больше похоже на правду. – Yaant Oct 06 '21 at 15:18

0 Answers0