解一元二次方程 数据类型用float与double结果不同

#include
#include
main()
{

float a,b,c,d,r,x,x1,x2;

scanf("%f %f %f",&a,&b,&c);
r=b*b-4*a*c;
d=2*a;

 if(a==0||b==0) printf("Input error!\n");
 if(r>0) printf("x1=%f\nx2=%f\n",(-b+sqrt(r))/d,(-b-sqrt(r))/d);
 if(r==0) printf("x1=x2=%f\n",-b/d);
 if(r<0) 
 {
     if(b==0)  printf("x1=%f i\nx2=%f i\n",sqrt(-r)/d,-sqrt(-r)/d);
     else printf("x1=%f+%fi\nx2=%f-%fi\n",-b/d,sqrt(-r)/d,-b/d,sqrt(-r)/d);
 }

}
float是对的

#include
#include
main()
{

double a,b,c,d,r,x,x1,x2;

scanf("%f %f %f",&a,&b,&c);
r=b*b-4*a*c;
d=2*a;

 if(a==0||b==0) printf("Input error!\n");
 if(r>0) printf("x1=%f\nx2=%f\n",(-b+sqrt(r))/d,(-b-sqrt(r))/d);
 if(r==0) printf("x1=x2=%f\n",-b/d);
 if(r<0) 
 {
     if(b==0)  printf("x1=%f i\nx2=%f i\n",sqrt(-r)/d,-sqrt(-r)/d);
     else printf("x1=%f+%fi\nx2=%f-%fi\n",-b/d,sqrt(-r)/d,-b/d,sqrt(-r)/d);
 }

}

改成double就错了 请问为什么

第二行改成scanf("%lf %lf %lf",&a,&b,&c)