2014-11-16 6 views
0

Я хочу знать, как найти антилогарифм поплавка. Мой первый подход состоял в том, чтобы использовать встроенные функции, такие как exp(), pow() как в Python & C, но они выдали ошибку диапазона.Как найти антилогарифм для больших значений?

Затем я попытался разбить его на две части, одно целое & другое плавание, а затем вычислить 10 рейза на мощность отдельно для обоих из них & затем умножьте их, чтобы получить результат. поэтому, когда я пытаюсь вычислить (а * б) в Python Это говорит долго INT слишком большой, чтобы преобразовать плавать

Моя первоначальная задача состояла в том, чтобы вычислить антилогарифма (х)% м & я преобразовал его (A * B)% m, где a - очень большое целое число & b - float.

Так может ли кто-нибудь помочь мне с этим? Есть ли какое-либо модульное свойство, применяемое к поплавкам? Или есть ли «быстрый» & «эффективный» способ расчета антилога (x)?

+0

как большой? Сколько точности? –

+0

x будет около 1500 ... Я не уверен, но минимальное значение x будет около 700 (поскольку оно вычисляется на промежуточном этапе моего вопроса, поэтому я не настолько уверен в этом). Точность не имеет значения, поскольку, наконец, я хочу, чтобы мой ответ был целым, но это должно округлять до целого целого. –

ответ

1

Если вам нужно рассчитать (10**x)%m, не пытайтесь сначала вычислить 10**x. pow функция принимает три аргумента:

ПР (х, у [, г])

Возврат х к мощности у; если z присутствует, верните x в силу y по модулю z (вычислено более эффективно, чем pow (x, y)% z). Форма двух аргументов pow (x, y) эквивалентна использованию оператора мощности: x ** y.

Это похоже на вашу проблему. Вы хотите pow(10, x, m)

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

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

  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 
+0

Я запустил ваше предложение в python & он говорит: ** pow() Третий аргумент не разрешен, если все аргументы не являются целыми числами ** –

+0

А, извините, я упустил из виду, что ваш экспонент был плавающим. –

+0

Значит, у вас есть другие предложения? –