Как найти антилогарифм для больших значений?
Я хочу знать, как найти антилогарифм поплавка. Моим первым подходом было использование встроенных функций, таких как exp(), pow(), как в Python, так и в C, но они выдавали ошибку вне диапазона.
Затем я попытался разбить его на две части: одно целое и другое с плавающей точкой, затем рассчитать 10-кратное увеличение до степени по отдельности для них обоих и затем умножить их, чтобы получить результат. поэтому, когда я пытаюсь вычислить (a*b) в Python, он говорит, что long int слишком велико, чтобы преобразовать его в float
Моей первоначальной задачей было вычислить antilog(x)%m, и я преобразовал его (a*b)%m, где a - очень большое целое число, а b - число с плавающей точкой.
Так может кто-нибудь помочь мне с этим? Есть ли какое-либо модульное свойство, которое применяется к поплавкам? Или есть какой-нибудь "быстрый" и "эффективный" способ расчета антилог (х)?
1 ответ
Если вам нужно рассчитать (10**x)%m
не пытайтесь вычислить 10**x
первый. Функция pow принимает три аргумента:
Pow(x, y[, z])
Верните x в степень y; если z присутствует, вернуть x в степень y по модулю z (вычисляется более эффективно, чем pow(x, y) % z). Форма с двумя аргументами pow (x, y) эквивалентна использованию степенного оператора: x**y.
Это кажется идеальным для вашей проблемы. Ты хочешь pow(10, x, m)
Упс: за исключением того, что у вас есть нецелый показатель.
Разве вы не можете использовать эти равенства:
a**(b+c) == a**b * a**c
(a*b)%m == (a%m * b%m) % m
чтобы определить функцию как это:
def bigpow(a, b, m):
bint = int(b)
bfrac = b - int(b)
return (pow(a, bint, m) * ((a**bfrac)%m)) % m