2017-02-09 6 views
1

C++ 프로그램에서 Newton Methods를 사용하여 주어진 부동 소수점 수의 큐브 루트를 계산합니다. 내 프로그램은 컴파일되지만 대답은 항상 0으로 나온다. 여기에 프로그램이 있습니다 :Newtons 메서드 큐브 루트를 찾는 경우 매번 0이 나온다.

#include <iostream> 
#include <cmath> 
#include <iomanip> 
using namespace std; 

int main() 
{ 
    const double epsilon = 0.00000001; 
    double A = 0; 
    double x1 = A/10; 
    double x2 = 0; 
    int iter = 0; 

    cout << "Please enter a number to square. " << endl; 
    cin >> A; 

    while ((fabs(x1 - x2) > epsilon) && (iter < 100)) { 
     x1 = x2; 
     x2 = ((2/3 * x1) + (A/(3 * x1 * x1))); 
     ++iter; 
    } 

    cout << "The answer is : " << x2 << endl; 
} 
+2

'2/3'가 정수 연산으로 수행됩니다. 0을 쓰는 중입니다.'2.0/3.0'으로 만들어보십시오. –

+4

루프 중에는 절대로 입력하지 마십시오. – Jarvis

+4

* 내 프로그램이 컴파일 됨 * - ok를 컴파일하는 프로그램은 구문이 올바른 것을 나타냅니다. 프로그램이 올바르게 실행되는지 또는 올바른 결과를 제공하는지 여부와 관련이 없습니다. – PaulMcKenzie

답변

3
에 코멘트에 무슨 말을했는지와 함께 당신은 루프에 간다고하고도 0으로 분할 된 당신이 x1=x2을 설정 때문에, 그래서 당신은 제로가 변수를 할당했다

당신의 게시하다. 그래서 할당과 선언을 옮기고 모든 것이 잘 수행되었습니다.

#include <iostream> 
#include <cmath> 
#include <iomanip> 
using namespace std; 

int main() 
{ 
    const double epsilon = 0.00000001; 
    double A = 0; 
    double x1 = 0; 
    double x2 = 1; 
    int iter = 0; 

    cout << "Please enter a number to square. " << endl; 
    cin >> A; 
    x1 = A/10.0; 
    while ((fabs(x1 - x2) > epsilon) && (iter < 100)) { 
     x1 = x2; 
     x2 = ((2.0/3.0 * x1) + (A/(3.0 * x1 * x1))); 
     ++iter; 
    } 

    cout << "The answer is : " << x2 << endl; 
} 
+1

감사합니다. 그게 효과가 있었어. x1 = x2로 설정하는 것만으로도 그 작은 차이가있었습니다. 다시 한 번 감사드립니다! –

+0

행복하게 도와주세요. –