前提・実現したいこと
C++で割線法のプログラムを作りたいのですが、何も出力されません。おそらくwhile文の中のif条件のところに問題があると思っていますが、どのように直すべきでしょうか。f(x) = x^5 + ax^4 + bx^3 + cx^2 + dx + e = 0で誤差0.000001以下の時にwhile文を抜けて答えを出力したいです。確認宜しくお願いします。
該当のソースコード
C++
1#include<iostream> 2#include<cmath> 3using namespace std; 4int a, b, c, d, e; 5float f(float x){ //f(x) = x^5 + ax^4 + bx^3 + cx^2 + dx + e 6 return pow(x, 5) + a * pow(x, 4) + b * pow(x, 3) + c * pow(x, 2) + d * x + e; 7} 8float xpoint(float x1, float x2){ 9 return f(x2) * ((x2 - x1) / (f(x2) - f(x1))); 10} 11float root(float x1, float x2){ 12 return x2 - xpoint(x1, x2); 13} 14int main() 15{ 16 cin >> a; getchar(); cin >> b; getchar(); cin >> c; getchar(); cin >> d; getchar(); cin >> e; 17 float x1, x2, x3; 18 cin >> x1; 19 getchar(); 20 cin >> x2; 21 while(1){ 22 x3 = root(x1, x2); 23 if(fabs(xpoint(x1, x2)) < 1e-6) break; 24 x2 = x3; x1 = x2; 25 }; 26 printf("%.3f", x3); 27 return 0; 28}
入力
1,1,1,1,1 -2,0
出力の目標
-1.000
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/12 04:15
2020/04/12 14:25