4

Например необходимо вычислить корень 3 степени из 27000. Я записывал следующими способами

a = pow(27000, 1/3) # ответ выходит примерно 29.99999993
a = 27000**(1/3) # ответ тот же

Пытался использовать модуль fractions , но ответ не меняется. Как найти точное число, если есть такая возможность. Округление не желательно

Alex
  • 89

2 Answers2

6

Можно использовать модуль SymPy:

from sympy import simplify   #  pip install sympy

In [124]: simplify("27000 ** (1/3)")
Out[124]: 30
MaxU - stand with Ukraine
  • 149,321
  • 12
  • 59
  • 132
6

Это общая проблема почти любого языка программирования. Дело в том, что континуум значений множества реальных значений каким-то способом надо отобразить на конечный набор машинных значений. Обычно это делается методом, который описывается стандартом IEEE 754

64 битовая (двойная точность) раскладка битов будет такая

введите сюда описание изображения

Соответственно принципиально есть числа, которые непредставимы точно - в данном случае 1/3 - не представимо точно. Возникнет невязка в районе 1e-8, что и дает 29.99999999

Можно посмотреть на точность представления например здесь

Barmaley
  • 81,300