double의 확장이 필요할경우 해결방법좀 부탁드립니다.
글쓴이: pjs0919 / 작성시간: 수, 2005/02/16 - 3:49오전
#include<stdio.h> #define MAX 100 int fac(int); /* * main() : * */ int main(void) { double exp=1.0; /* 1/0! = 1 이므로 exp를 1로 초기화한다. */ int i; //printf("자연상수 e를 구합니다.\n"); for(i=1; i<=MAX; i++) { exp += (1.0/ (float)fac(i) ); printf("자연상수 e = %.30f \n", exp); } return 0; } /* * fac() : * */ int fac(int i) { if(i==1) return 1; else return fac(i-1)*i; }
여기에서 i가 34이후로는 double이 오버플로 되더군요..
더블의 확장이 필요한데...이러한 자료형의 확장이 필요한경우
어떻게 해결해야 하나요?
구지 이런일때문이 아니더라도 ... 다른 컴퓨터아키텍쳐상에서
이식이 필요할경우 분명히 이런작업이 필요할텐데...해결방법좀 알려주시면 감사하겠습니다.
Forums:
Re: double의 확장이 필요할경우 해결방법좀 부탁드립니다.
근데 제가 보니 i 가 34 가 되면 fac 호출시 리턴값이 0 입니다.
이경우 exp += (1.0/ (float)fac(i) );
코드에서 문제가 될수 있죠. 0으로 나눌려고 했으니
말이죠. 정확히 뭘 할려는 코드인지 모르겟지만 이부분을 잘
살펴보시길 바랍니다.
근데 0으로 나누면 프로그램 크래쉬 나지 않나요?
Re: double의 확장이 필요할경우 해결방법좀 부탁드립니다.
다시 자세히 보니..문제는 double형 exp가 아니더군요..8)
다시 자세히 보니..문제는 double형 exp가 아니더군요..8)
int형 fac()에서 int가 오버플로되면서 음수값이 되자..값이 틀려지면서
이렇게 되는거였네요.....
답변해주셔서 감사합니다.
\(´∇`)ノ.大韓兒 朴鐘緖人
댓글 달기