- ベストアンサー
ax^2+bx+c=0の解を求める方法
- 質問文章の内容は、ax^2+bx+c=0の解xを求める方法についてです。
- 質問者は、a、b、cを入力して解xを求める方法や、実解・虚数解・重解の場合の取り扱いについて分かりません。
- コードの一部にも問題がある可能性がありますので、アドバイスを求めています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
while(a=0); は、 while(a==0.0); だと思います。 #1の方と同じだけど sqrtがdistの間違い ans = (-b+dist(a,b,c))/(2*a); が distの前にsqrtが要る ans = (-b+sqrt(dist(a,b,c)))/(2*a); ans = (-b-sqrt(dist(a,b,c)))/(2*a); の2つの場合を考えないといけない。 distの値で 0:重解 -:虚数解 +:実解 のように場合分けしないといけない
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
課題のようなので、少し意地悪をすると... > printf("%lf", ans); %lfを使っているということはC99だと思います。 C99であれば、 int quadratic(double complex ans[2], double a, double b, double c) { double D = b*b - 4*a*c; ans[0] = (b + csqrt(D)) / (2 * a); ans[1] = (b - csqrt(D)) / (2 * a); return (D > 0) - (D < 0); } のように複素数型を使えば、虚数解でも普通に計算できるので便利です。
お礼
色々知らないことばかりで勉強になります。ありがとうございました。
- ftomo100
- ベストアンサー率41% (297/723)
課題だと思いますのでヒントだけ。 double sqrt sqrt -> distの間違いですよね? distの値によって処理(解の表示)を分岐させれば良いと思う。 dist>0 と dist=0 と dist<0
お礼
そうですね。間違えてました。ありがとうございました。
お礼
たくさん間違えていてすみません。ご指摘ありがとうございました。 場合わけも具体的に考えたらすぐわかることでしたね。ありがとうございました。