2014-06-06 2 views
0

다음 수학에서 양수 값을주는 첫 번째 자연수를 계산하는 프로그램이 필요했습니다. 기능. F (X) = 0.001 - (1/x)를출력이 올바르지 않은 이유를 지정할 수 없습니다.

#include<iostream> 
using namespace std; 


long double abso (long double x) 
{ 
    return (x > 0 ? x : -x); 
}; 

int main() 
{ 
    long double y=0,x=0; 

    for (register long double n=0; y<=0 ;) 
    { 
     n++; 
     y = 0.001 - (1/x); 
     x=n; 
    }; 
    cout<< "The number is "<< x <<'\n'; 
    system ("pause"); 
} 

는 1001 주기로하지만 이

사람이 코드에서 오류로 저를 참조 할 수 있습니다 나에게 1002

를 준거야?

+1

놀라운 것은 아닙니다. '1/x'에서 사용 된'x'는 마지막 반복에서 왔습니다. – chris

+0

나는'1001'을 얻는다. 부동 소수점 정밀도 문제로 인해 야합니다. –

+0

[내가 1001을 가지고] (http://coliru.stacked-crooked.com/view?id=0f024e7427b2c8fa) – 0x499602D2

답변

0

루프 for (register long double n=0; y<=0 ;)을 도움이되기를 바랍니다.

이 시점에서 마지막으로 할당했다 :
n++; 
    y = 0.001 - (1/x); 
    x=n; 

그래서 당신의 방정식을 확인한 x하지 N과 동일한 n-1, 따라서 잘못된 출력됩니다.

당신은 훨씬 간단 while 루프 여기 쓸모가 추가 n없이 일을 쓸 수 있습니다합니다 (register 수정을 제외하고,하지만 당신이 정말로 필요하면 _ 난 _ X에 넣어 의심) :

while (y<=0) 
{ 
    y = 0.001 - (1/++x); 
} 
cout<< "The number is "<< x <<'\n'; 
+0

"(long double register n = 0, y <= 0;)에 대한 루프는 한 번 y <= 0으로 중단됩니다."한번 y> 0 "을 의미하지 않습니까? – Aberrant

+0

물론 편집 된 덕분에 – quantdev

+0

정말 1001을 주려고합니다. 잘못된 것입니다. –

1

x를 먼저 나누기 전에 x로 지정하십시오. 1을 0으로 나눌 수 없습니다. 1로 나눈 값은 실제로 오류입니다.

for (register long double n=0; y<=0 ;) 
    { 
     n++; 

     x=n; 
     y = 0.001 - (1/x); 
    }; 

나는 그것을 한 번 y > 0 중단됩니다

관련 문제