2014-11-16 6 views
0

나는 float의 반 대수를 찾는 법을 알고 싶다. 첫 번째 방법은 Python & C에서 exp(), pow()와 같은 내장 함수를 사용하는 것이지만 범위를 벗어난 오류를 제공합니다.큰 값에 대한 반 대수를 찾는 방법은 무엇입니까?

두 개의 부분으로 하나의 정수 & 다른 부유물을 깨뜨 렸습니다. 그 다음 두 개의 힘을 따로 따로 따로 올림하여 1032를 계산 한 다음 결과를 얻기 위해 곱합니다. 내가 파이썬 (A *의 B)을 계산하려고 할 때 때문에 너무 큰 long int와 내 원래 작업이 ANTILOG (X) %의 m & 내가 그것을 변환 (A *의 B를 계산하는 것이 었습니다

떠 변환 말한다) % m 여기서 a는 매우 큰 정수입니다. & b는 float입니다.

누구나 나를 도와 줄 수 있습니까? 수레에 적용되는 모듈 속성이 있습니까? 또는 반올림 (x)을 계산하는 "빠른"& "효율적인"방법이 있습니까?

+0

:

  1. a**(b+c) == a**b * a**c
  2. (a*b)%m == (a%m * b%m) % m

이 같은 함수를 정의 :

는 이러한 등식을 사용할 수 있습니까? 얼마나 정밀도? –

+0

x는 약 1500이 될 것입니다 ... 확실하지는 않지만 x의 최소값은 약 700입니다. (이는 내 질문의 중간 단계에서 계산 된 것이기 때문에 그것에 대해서는별로 확신하지 못합니다). 정밀도는 마침내 내 대답을 정수로 원한다면 중요하지 않지만 올바른 정수로 반올림해야합니다. –

답변

1

(10**x)%m을 계산해야하는 경우 먼저 10**x을 계산하지 마십시오. pow 함수는 세 개의 인자 취

POW (X, Y [Z]) 전력을 X, Y

반환하는 단계; z가 존재하면, x를 y로 출력하고, z를 모듈로 z (pow (x, y) % z보다 효율적으로 계산 함). 두 개의 인수 형식 인 pow (x, y)는 x ** y라는 전래 연산자를 사용하는 것과 같습니다.

귀하의 문제에 이상적인 것으로 보입니다. 원한다면 pow(10, x, m)

OOPS : 정수가 아닌 지수를 제외하고는. 얼마나 큰

def bigpow(a, b, m): 
    bint = int(b) 
    bfrac = b - int(b) 
    return (pow(a, bint, m) * ((a**bfrac)%m)) % m 
+0

당신의 제안을 파이썬으로 돌 렸습니다. ** pow() 모든 인수가 정수가 아닌 한 3 번째 인수는 허용되지 않습니다. ** –

+0

아, 미안 해요, 당신의 지수가 실수로 간과 된 것 같습니다. –

+0

다른 제안 사항이 있으십니까? –