为了表示浮点数,我们使用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
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- fork()和exec()之间有什么区别()
- C语言中的%d和%i格式说明符之间的区别
- C结构和C++结构之间有什么区别()
- const char *p,char *const p和const char * const p之间的区别
- CALL和JUMP指令之间有什么区别()
- Golang中var关键字和短声明运算符之间的区别
- C#中var和dynamic之间有什么区别()
- C#中系统级别异常和应用程序级别异常之间的区别
- 在kubernetes中使用nfs-provisioner动态存储卷