こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

虚数解の表示

Ax^2+Bx+Cの形の二次関数の解を計算するプログラムです

#include <stdio.h>
#include <math.h>

int main(void)
{
double a,b,c,d,x1,x2,real,image;

printf("A=");
scanf("%lf",&a);
printf("B=");
scanf("%lf",&b);
printf("C=");
scanf("%lf",&c);

if(a==0){x1=-c/b;
printf("X=%5.2lf\n",x1);
}

if(a!=0.0){d=sqrt(pow(b,2.0)-4*a*c);
if(d<0.0){
real=(-b)/(2*a);
image=sqrt(-d)/(2*a);
printf("実数=%5.2lf\n",real);
printf("虚数=±%lfi\n",image);}

else if(fabs(d)<0.0){
x1=(-b)/(2*a);
printf("X=%5.2lf\n",x1);}

else if(d>0.0){
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("X1=%5.2lf\n",x1);
printf("X2=%5.2lf\n",x2);}
}
return 0;}

判別式d<0、d>0、d=0で分けています
判別式dが負になるとき(虚数解の部分)はそのままではsqrtが使えないので、-dを入れてみたのですがうまくいきません

どのように修正すればよいのかご教示願います
よろしくお願いします

投稿日時 - 2008-10-30 11:57:58

QNo.4440900

すぐに回答ほしいです

質問者が選んだベストアンサー

dは判別式なのですから b^2 - 4acを計算しましょう
実際に解の計算にはこの判別式の値をルート(sqrt)にかけて算出します

if(a!=0.0){d=sqrt(pow(b,2.0)-4*a*c);

if(a!=0.0){d=pow(b,2.0)-4*a*c;
としましょう

また
else if(fabs(d)<0.0){

else if(fabs(d)==0.0){
では無いかと思います ・・・ 重解のばあい

投稿日時 - 2008-10-30 12:17:54

お礼

勘違いしてました…
直せました。ありがとうございます

投稿日時 - 2008-10-30 16:01:39

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)