2017-10-25 7 views
0

힘과 큰 숫자의 모듈 (double 형식)을 계산하려고합니다. 나는 calcule 할 (1234^79) 모드 3337. 결과는 901 (우분투의 계산기)하지만 기능 FMOD 반환 내가 잘못 뭐하는 거지 1788double과 fmod로 작업 할 때 오류가 발생했습니다.

#include <math.h> 
#include <tgmath.h> 
#include <stdlib.h> 
#include <stdio.h> 

void main(){ 

    double res1; 
    double dou = powl(1234.00,79.00);//function for doubles 

    printf("Result in double o powl %.3f\n",dou); 
    res1=fmod(dou, 3337.00);//doubles 

    printf("Result in double of fmod %.2f\n",res1); 
} 

입니까? 어떤 대답은? 미리 감사드립니다.

+0

'powl' 기대와 유형'긴 double'의 값을 반환합니다. 반환 값을 'double'유형의 변수에만 할당하면 약간의 정확도가 손실됩니다. – Gerhardh

+0

@Gerhardh : 나는이 경우에 'long double' 정밀도가 도움이 될 것이라고 생각하지 않습니다! ;-) –

+1

반복 계산으로 바꿉니다. [this] (https://ideone.com/yKFSSE) – BLUEPIXY

답변

1

1234^79245 decimal digits입니다.

double의 정밀도는 십진수 17 자 정도입니다.

이 문제를 임의의 정밀도가 필요없는 것으로 축소하려면 약간의 수학을 사용해야합니다 (Modular Exponentiation 참조).

(당신이 효율적인 솔루션에 관심이없는 경우 또는 단지 임의 정밀도 수학 라이브러리 + 무력을 사용합니다.)