#include #include #include main() { double a, b, c; double d, sqd; double x; double re, im; double re2, im2; fprintf(stderr,"Input a b c \n"); scanf("%lf%lf%lf", &a, &b, &c ); /* discriminator D 判別式 D */ d=b*b-4.0*a*c; if( d>=0.0 ){ printf("Method 1\n"); sqd=sqrt( d ); x=(-b+sqd)/(2.0*a) ; printf("%27.20e ( %e )\n", x , a*x*x + b*x + c ); x=(-b-sqd)/(2.0*a) ; printf("%27.20e ( %e )\n", x , a*x*x + b*x + c ); printf("Method 2\n"); if( b>0.0 ){ x=(-b-sqd)/(2.0*a) ; }else{ x=(-b+sqd)/(2.0*a) ; } printf("%27.20e ( %e )\n", x , a*x*x + b*x + c ); x = (c/a)/x ; printf("%27.20e ( %e )\n", x , a*x*x + b*x + c ); }else{ /* ここから先は精度の話題にはあまり関係ない */ re=-b*(2.0*a); im=sqrt( -d )/(2.0*a); re2=a*(re*re-im*im) + b*re + c ; im2=re*im+im*re + b*im ; printf("%e + %e i ( %e + %e i )\n", re2, im2 ); im = -im ; re2=a*(re*re-im*im) + b*re + c ; im2=re*im+im*re + b*im ; printf("%e + %e i ( %e + %e i )\n", re2, im2 ); } }