C语言中浮点数据类型(你学废了吗)
1. 处理带小数的数值
类似于1.234567,0.00001,这类非整数的数据。int能不能装这些数据?
#include <stdio.h>
int main() {
int a = 1.234567;
int b = 0.00001;
int c = 365.12345;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
return 0;
}
小数部分都丢失了,这时候就需要引入新的类型了——浮点类型。
2. 浮点类型:float
把代码中的整型 int
,用单精度浮点型 float
替代。之后,再将 printf("%d\n",a)
; 中的占位符是 %d
,所以我们用 %f
替换。( %d
占位符用于整型, %f
占位符用于浮点型)
#include <stdio.h>
int main() {
float a = 1.234567;
float b = 0.00001;
float c = 365.12345;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
将 int 替换成 float 之后,大部分的数据都是正确的。但是 365.12345 变成了 365.123444 ,很明显精度出现了误差。 这是因为,浮点数并不能表示无限的精确,它会存在着一定的误差。
C标准规定,float类型必须至少能表示6位有效数字,并且取值范围至少是10^-37~10+37。
所以,使用float
来装365.12345
时,前面六位数值是准确的,但是后面的数值略有误差。
3. 浮点类型:double
double
叫做双精度浮点型,是比float
精度更高的类型。把上面代码中的 float
换成 double
。
printf
函数 中使用的占位符不需要修改,float
和double
均可以使用 %f
来作为占位符。
#include <stdio.h>
int main() {
double a = 1.234567;
double b = 0.00001;
double c = 365.12345;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
这次 365.12345 也是正确的了。
注意: double 类型也是有精度范围的。如果是更高精度的数据, double 也会出现误差。
日常的应用中,不会苛求一个精度完美的数值,是会允许存在一定误差范围的。但是,如果涉及高精度领域的计算时,需要额外使用特殊的方法进行数值计算,以尽量减少误差。
4. 浮点类型所占字节大小
之前对整型的经验,越大范围的整型类型所占的空间越大。 那么对于浮点类型来说,越高精度、越大范围的浮点类型,应该也会占用越大的空间。
用sizeof
来测量一下float
和double
分别占用多大的空间。
#include <stdio.h>
int main() {
printf("sizeof float = %d\n", sizeof(float));
printf("sizeof double = %d\n", sizeof(double));
return 0;
}
float , double 分别为4,8个字节。证明:对于越大范围,越高精度的类型所占空间越大。
相关文章
- Arctic助力传媒实现低成本的大数据准实时计算
- 甲骨文发布 Oracle Alloy服务
- Cloudera扩大合作伙伴机会,加速产品上市
- 从0到1,认识结构分析法
- Pandas实用技巧:SAC机制!
- 大数据驱动的创新对智慧城市发展至关重要
- Kaggle全球数据科学家薪酬大揭秘:俄罗斯竟力压美国成第一!
- 数据飞轮:数据战略四步法
- 终于有人将数据埋点讲明白了
- 版本更新 | 有数BI LTS8.0发布啦
- 领导对数据的期望值太高了!该怎么破
- 创建有效大数据模型的六个技巧
- 数字孪生与未来城市建设
- 探究Presto SQL引擎(3)-代码生成
- 关于智慧城市你需要了解那些事
- 探究Presto SQL引擎(1)-巧用Antlr
- 一篇数据分析报告写作指南,你学会了吗?
- 聊聊大数据下的存算分离
- 共享数据库过时了,应用程序数据库才是王道!
- 大数据Hadoop之—Apache Hudi 数据湖实战操作