試験を通じて1058:二次方程式を求めて

  実際には、それが最後の質問に遭遇するまで、それは非常に滑らかで質問の大半を行う本章で -二次方程式を解く問題です。問題は、実際に見て非常に簡単にドリルですが、3例--Δ<0、Δ> 0、検討して Δ= 0; しかし、実際の動作は、はるかに単純なよりを発見しました。この質問最初に私が再度チェック提出した、結果は誤差が良く、常にチェックポイントを持っているエラーのために変更した後に発見しました。発見後のインターネット検索からは、C ++は、精度に問題がある-デジタル読み取りの設定精度のうちの時間を、読み込み-0これがセットの精度を超えたプログラムの状況を考慮することが私たちを必要とします。

  場合、判定精度、Δ正または負の、使用の絶対値があるため。私たちは通常、絶対値は、ABS()で使用しますが、それは10進数ですので、絶対値関数--fabs小数に使用そう()。

  この質問を完了することにより、私は本当に私が知識を考えていなかった多くのことを学びました。

1の#include <ビット/ STDC ++ H.>
 2  使用して 名前空間STD;
 3  の#defineシャオ0.000000000001デルタ//セットの精度は、必要に応じて変更することができる
 。4  の#defineためPRESCRIBEデルタに(精度XI 0.000001 //セットXを、精度が低下し、xの決意の精度)が低下されるべきである。

5。 INT ()メイン6。{ 7。ダブル、B、C、X [ 2 ]、DT; 8 CIN >> B >> C ; 9 DT = B * B- 4。 * A * C; 10 のiF(DT < 0 && FABS(DT)> シャオ)//決定デルタがゼロ未満であります

。11      {
 12れる          COUT << 回答なし!;
 13は         リターン 12であり;
 14      }
 15       IF(FABS(DT)< シャオ)//設定精度であれば以下のデルタより、デルタほぼゼロこの時点で、デルタはゼロに等しいように。
16      {
 17。          X [ 0 ] =( - B)/ 2 / A、
 18で         IF(FABS(X [ 0 ])> XI)
 。19          {
 20である              のprintf(" X1 = X2 =%5Lf。"、X [ 0 ]) ;
 21          }
 22         他の
23は         、{
 24              のprintf(" X1 = X2 =%5Lf。"0 ); xが設定精度を超えた場合、xがゼロに等しいよう//、次にX、ゼロにほぼ等しいです。
25          }
 26である     }
 27      IF(DT> シャオ)
 28      {
 29          X [ 0 ] =( - B + SQRT(DT))/ 2 / A、
 30          IF(FABS(X [ 0 ])< XI)
 31である         {
 32              X [ 0 ] = FABS(X [ 0 ]); Xは設定精度を超えた場合、//、Xはの絶対値が増加するように、-Oとして扱われる
 33          }
 34         X [ 1 ] =( - B-SQRT(DT))/ 2 / 35          であれば(ファブ(X [ 1 ])< XI)
 36          {
 37              X [ 1 ] =ファブ(X [ 1 ]); //同上
 38          }
 39          ソート(X、X + 2 )。
40          のprintf(" X1 =%5lf; X2 =%5lf "、X [ 0 ]、X [ 1 ])。
41      }
 42      リターン 0 43 }

おすすめ

転載: www.cnblogs.com/arknight/p/12215484.html