Как найти антилогарифм для больших значений?

Я хочу знать, как найти антилогарифм поплавка. Моим первым подходом было использование встроенных функций, таких как 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)

Упс: за исключением того, что у вас есть нецелый показатель.

Разве вы не можете использовать эти равенства:

  1. a**(b+c) == a**b * a**c
  2. (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
Другие вопросы по тегам