C/C++中float和double有什么区别()

为了表示浮点数,我们使用float, double和long double。
有什么不同 ?
double的精度比float高两倍。
float是32位IEEE 754单精度浮点数1位符号(指数为8位, 值为23 *), 即float具有7位十进制精度。
【C/C++中float和double有什么区别()】double是64位IEEE 754双精度浮点数(符号1位, 指数11位, 值52 *位), 即double的精度为15位小数。
让我们举个例子(https://stackoverflow.com/a/2388838/6942060):
对于一个二次方程x2 – 4.0000000 x + 3.9999999 = 0, 10个有效数字的精确根是r1 = 2.000316228和r2 = 1.999683772

//C program to demonstrate //double and float precision values#include < stdio.h> #include < math.h> //utility function which calculate roots of //quadratic equation using double values void double_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); }//utility function which calculate roots of //quadratic equation using float values void float_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); }//driver program int main(){ float fa = 1.0f; float fb = -4.0000000f; float fc = 3.9999999f; double da = 1.0; double db = -4.0000000; double dc = 3.9999999; printf ( "roots of equation x2 - 4.0000000 x + 3.9999999 = 0 are : \n" ); printf ( "for float values: \n" ); float_solve(fa, fb, fc); printf ( "for double values: \n" ); double_solve(da, db, dc); return 0; }

输出如下:
roots of equation x2 - 4.0000000 x + 3.9999999 = 0 are : for float values: 2.000002.00000 for double values: 2.000321.99968

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

    推荐阅读