一元の二次方程式を求めます(情報学のオリンピックの1本の通-T 1058)


【タイトル説明】
一元二次方程式ax^2+bx+c=0の根を求め、ここでaは0に等しくない.結果は小数点以下5桁まで正確であることが要求される.
【入力】
方程式ax^2+bx+c=0の係数を表す3つの浮動小数点数a,b,c(それらの間に1つのスペースで区切られた)を含む行を入力します.
【出力】
方程式の解を表す行を出力します.
2つの実ルートが等しい場合、出力形式は「x 1=x 2=...x 1=x 2=...」である.
2つの実根が等しくなく、根が小さい者の前の原則を満たすと、出力形式は「x 1=...;x 2=...x 1=...;x 2=...」;
実根がなければ「No answer!」と出力します.
すべての出力部は小数点以下5桁まで正確で、数字、記号の間にスペースがありません.
【入力サンプル】
-15.97 19.69 12.02 
【出力サンプル】
x1=-0.44781;x2=1.68075
【ソースプログラム】
#include 
#include 
#include 
#define precision_1 1e-12//      ,         
#define precision_2 1e-6//      ,         
/*
             :1bit   ,11bit   (     ),52bit    (  )。
                  x    x=((-1)^S)(1.M)(2^(E-127))
      ,x         0。
           ,   E  0   M  0 ,         x        0 ,
          S,  0  0  ; 
*/
/*
    x1 x2     ,precision      。
        fabs(x1-x2)<=precision   x1 x2    。
             , precision      
*/
using namespace std;
int main()
{
    double a,b,c,x1,x2,delta;
    cin>>a>>b>>c;
    delta=b*b-4*a*c;//   
    if(delta<0&&fabs(delta)>precision_1)//              , delta<0 ,   
        printf("No answer!
"); else if(fabs(delta)0, delta≈0 { x1=-b/(2*a); if(fabs(x1)0 { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); if(fabs(x1)