一、概念
float :单精度浮点型数据类型
double :双精度浮点型数据类型
二、对比
类型 | float型 | double型 |
字节数 | 4(包括一个符号位) | 8 |
精度 | float < double | |
cpu处理速度 | float > double | |
scanf 用法 | %f | %lf |
printf 用法 | %f | %f(推荐)或 %lf |
有效数字(有效位) | 6~7 | 15~16 |
数值范围(绝对值) | 0及1.2e-38~3.4e38 | 0及2.3e-308~1.7e308 |
注:%f 默认保留六位小数,要保留n位小数用printf ("%.nf",a);
三、误差
数字存储在32位或64位浮点变量(float类型和long类型的变量)中时只能以非标准化类型存储。
它们在存储数据时存储的都是近似值。eg:3.3333333333......此类数据其实是无限循环,但计算机的内存有限,用有限的地方存储无限的数据,只能存储近似值。
四、选择
若存储比精度更重要,对浮点变量用float类型;
若精度更重要,用double。
(double的精确性以空间和性能的消耗为代价)
【放一些例子帮助理解】
eg1. 在迭代程序中,随迭代次数积累,偏差会越来越大。
eg2. (a+b)+ c ≠ a +(b+c)
eg3. 10/3用float存储:3.33333 用double存储:3.3333333333333
tip: double 之于 float 可类比 int 之于 short