What is the difference between float and double?

前端 未结 13 918
悲哀的现实
悲哀的现实 2020-11-22 06:00

I\'ve read about the difference between double precision and single precision. However, in most cases, float and double seem to be interchangeable,

13条回答
  •  一整个雨季
    2020-11-22 06:04

    Given a quadratic equation: x2 − 4.0000000 x + 3.9999999 = 0, the exact roots to 10 significant digits are, r1 = 2.000316228 and r2 = 1.999683772.

    Using float and double, we can write a test program:

    #include 
    #include 
    
    void dbl_solve(double a, double b, double c)
    {
        double d = b*b - 4.0*a*c;
        double sd = sqrt(d);
        double r1 = (-b + sd) / (2.0*a);
        double r2 = (-b - sd) / (2.0*a);
        printf("%.5f\t%.5f\n", r1, r2);
    }
    
    void flt_solve(float a, float b, float c)
    {
        float d = b*b - 4.0f*a*c;
        float sd = sqrtf(d);
        float r1 = (-b + sd) / (2.0f*a);
        float r2 = (-b - sd) / (2.0f*a);
        printf("%.5f\t%.5f\n", r1, r2);
    }   
    
    int main(void)
    {
        float fa = 1.0f;
        float fb = -4.0000000f;
        float fc = 3.9999999f;
        double da = 1.0;
        double db = -4.0000000;
        double dc = 3.9999999;
        flt_solve(fa, fb, fc);
        dbl_solve(da, db, dc);
        return 0;
    }  
    

    Running the program gives me:

    2.00000 2.00000
    2.00032 1.99968
    

    Note that the numbers aren't large, but still you get cancellation effects using float.

    (In fact, the above is not the best way of solving quadratic equations using either single- or double-precision floating-point numbers, but the answer remains unchanged even if one uses a more stable method.)

提交回复
热议问题