#include<stdio.h>
#include<math.h>
int main(){
int i,fact;
float add;
float a=1;
for(i=1,add=0,fact=1;i<=a;i++)
{
fact=fact*i;
add=(double)1/fact+add;
a++;
if(a<0)
break;
}
printf("%.8f",1+add);
}
출력을하면 1.#INF0000 이렇게 문자랑 섞여서 나와요. double써보라해서 써봤는데 출력이 아무것도 안되고 lf써도 안되네요 if(a>30) 이렇게 하면 값이 2.7182.... 이렇게 잘나오는데
왜 그런걸까요.. Dev C++ 5.11에 컴파일러는 TDM-GCC 4.9.2 64-bit Release입니다. 혹시 몰라서 컴파일러 한번씩 바꿔서 해봤는데 그대로네요.
그거 구글에 치면 나옴 - dc App
어딜봐서 c++?
C잖아 - dc App
조건이 하자가 있는거같은데여 1/x 더하면 발산하니까 INF나오는거고요 - 164260의 휘발성 계정
계속 얘기하지만 INF는 값이 틀려먹은거니까 값부터 체크하라구요 - 164260의 휘발성 계정
그리고 add랑 i 선언하고 초기화를 꼭 저모양으로 분리해서 해야합니까 - 164260의 휘발성 계정
a가 뭔지도 모르겠고 아 이제보니 수학적으로는 발산하면 안되는데 왜 INF인지도 모르겠네 제생각엔 a가 오버플로우로 터지기 전에 fact가 먼저 터져서 add도 같이 터져서 개판되는거같네요 루프마다 변수 값들 출력해보던지 디버거로 찍어보든지 해서 추적해보세요 - 164260의 휘발성 계정