Чтобы найти количество цифр числа в определенной базе, я попытался написать строку:
numdigits = math.floor(math.log(num, base)) + 1
где math.log(num, base)
эквивалентно math.log(num)/math.log(base)
Однако в обоих случаях это иногда приводит к неправильному количеству цифр. Это связано с тем, что ответом на math.log является число с плавающей запятой и, следовательно, имеет ограниченную точность. Например, при вычислении основания журнала 3 из 3486784401 (3^20):
>>> math.log(3486784401, 3)
19.999999999999996
Принимая во внимание это, вы получите 19, в то время как правильный ответ - 20. Я понимаю, что это из-за того, как числа с плавающей запятой представлены в двоичном формате, однако мне было интересно, есть ли способ обойти эту проблему.
Есть ли способ написать функцию, которая дает пол логарифма по любому основанию со 100% точностью?
sympy.log
для точных вычислений. - person hilberts_drinking_problem   schedule 27.07.2017