큰 수에 대한 연산과 프린트 방식이 궁금합니다. 2^48이상..

pleasantman의 이미지

fout = { 19660800, 30720000, 56000000 };

( fout * pow(2, 48 )) / (10000000 * i) = FTW(정수);

i는 4~20인 정수, (2*fout)은 (10000000 * i )보다 크거나 같은 수이여야 합니다.

이런 문제에서 i와 FTW를 계산해야 합니다.

숫자가 단위가 너무 크니 계산이 어렵군요.. 어떻게 해야 할까요?

    fout = 19660800 ;

    for( i = 4 ; i < 21 ; i++ )
    {
         if( ( fout * pow(2, 48))%(10000000 * i) == 0 )
         {
            FTW = (( fout   * pow(2, 48)))/(10000000 * i);
            printf("\n FTW = %d, i = %d \n", FTW, i );
         }
    }

대충 이런 식이긴 한데 숫자가 너무 켜서 맞지 않는 군요..
어케 처리 해야 하는지... ( 자료형 모두 무시하고 적어본 겁니다.)

doldori의 이미지

그냥은 안 되고 특별한 라이브러리를 쓰면 됩니다. 대표적으로 GNU MP library가 있고
이외에도 arbitrary precision arithmetic으로 검색하면 많은 정보가 나옵니다.

LispM의 이미지

아니면 그런것을 지원하는 프로그래밍 언어를 사용하면 됩니다.

CL-USER> (* 56000000 (expt 22 48))
1529243722727232980599628261314132416365261545473822521304931106816000000
CL-USER> (/ 2 3)
2/3
CL-USER> (expt (/ 2 3) 10)
1024/59049
CL-USER> 

http://lisp.or.kr http://lisp.kldp.org - 한국 리습 사용자 모임

pleasantman의 이미지

LispM wrote:
아니면 그런것을 지원하는 프로그래밍 언어를 사용하면 됩니다.
CL-USER> (* 56000000 (expt 22 48))
1529243722727232980599628261314132416365261545473822521304931106816000000
CL-USER> (/ 2 3)
2/3
CL-USER> (expt (/ 2 3) 10)
1024/59049
CL-USER> 
그런데요.. 위의 프로그밍 언어가 먼가요?
모르겠어요.. (T.T)
cjh의 이미지

Common Lisp네요.

--
익스펙토 페트로눔