Неправильный ответ от math.log (python 3) - PullRequest
4 голосов
/ 18 марта 2019

Сегодня я использовал функцию math.log(), чтобы получить логарифм 4913 для заданной базы 17. Ответ равен 3, но когда я запустил код ниже, я получил 2.9999999999999996.

1) Это так?потому что math.log(x, b) вычисление log(x) / log(b)?

2) Есть ли какое-либо решение, чтобы получить правильный ответ 3?

import math
print(math.log(4913,17))

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Вы могли бы использовать библиотеку gmpy2:

import gmpy2

print(gmpy2.iroot(4913, 3))
# (mpz(17), True)

print(gmpy2.iroot(4913 + 1, 3))
# (mpz(17), False)

, которая сообщает вам результат и является ли он точным.

также имеет взглядв Записать точность в python и Не нарушена ли математика с плавающей запятой? .

2 голосов
/ 18 марта 2019
  1. Да, документация говорит об этом явно.
  2. Другое решение - использовать класс Decimal из библиотеки «decimal»:

    import math
    from decimal import Decimal, getcontext
    getcontext().prec = 6
    Decimal(math.log(4913))/Decimal(math.log(17))
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...