C要点5:float、double、long double(大小,范围,输入输出符,科学计数法)
浮点型:数学里的小数
C语言浮点型有三个类型:float、double、long double
输入输出输出格式符: 默认输出6位小数
float–%f
double、long double–%lf 不初始化不行
%e 科学记数法,形式如:2.23e2其中e–10
float
内存大小:4字节,由sizeof(float)获取
表示范围:-2^128 ~ +2^128,也即约-3.40282e+38 ~ +3.40e+38
这些数不用记,知道范围超级大就行了
标准规定:float指数范围不小于-37~38,e是10,所以有的环境下,精度会高一些
默认范围:头文件 float.h宏 FLT_MIN
有效数位:float也叫单精度浮点型
ANSI C规定最小值是6,有的编译器可能8位,可能7位
注意不是小数的位数,是以第一个非0数字开始数6位
比如:12345.6789,6位精度位指的是12345.6,后面得789就是非精度位,也就是不要考虑了,789将会是不精确存储。
0.00012456789,6位精度位指的是123456,789就不用考虑是否准确了
double
内存大小:8字节,由sizeof(double)获取
表示范围:-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308
标准规定:double指数范围不小于-3738,实际实现-307308
有效数位:double又叫双精度浮点型
ANSI C规定最小值是10位, 多数编译器是15,16,17位左右
long double
内存大小:规定不小于double的长度,至少8字节,不同的编译器这个字节数可能不同,有的是8,有的是10,有的是12,有的甚至更大。那么这个字节数就以自己使用的编译器为准,测一下,知道有这个区别。
表示范围:那这个就依据大家自己的测试,字节数越大,精度就越大
Visual Studio里long double跟double是一样8字节
测试gcc,是12字节
有效数位:ANSI C规定最小值是10位,实际中依据环境具体实现,vs测是18位
后缀:
后缀:
L /l 0.2l/0.2L long double数据
无后缀:
0.2 double数据
后缀:
F/f 0.2F/0.2f float数据
问题:如果不是对应的,会涉及到类型转换,类型转换的结果可能会造成内存截断,导致数据不是我们想要的,所以需要尽量保持一致
为啥要转换:只有数值类型一样了,计算机才能进行计算,不一样就转成一样的
输入输出
printf输出浮点型
%f,%lf这两个都行,输出没有严格要求,默认是6位小数,第六位四舍五入
%5.2f /lf
5代表整个数占据屏幕多少个字符位,多了有效果,少了无效果
. 表示小数点
2表示小数的位数,第二位是四舍五入
%e 科学记数法。123.34输出1.233400e+02
默认6位小数,也可控制%.4e,就输出1.2334e+02
e是10,
+02是正2次方
scanf输入浮点型
float %f
double %lf
long double %lf
输入浮点型,格式符一定要跟类型对应上,否则就出错
浮点型的存储
float:1bit(符号位) 8bits(指数位) 23bits(尾数位)
最高位是符号位:1代表负数,0代表正数
指数位:-2^7~ 2^7-1 -128~127
有效数位(尾数位):2^23 8388608 7位
double:1bit(符号位) 11bits(指数位) 52bits(尾数位)
最高位是符号位:1代表负数,0代表正数
指数位:-210~210-1 -1024~1023
有效数位(尾数位):2^52 4503599627370496 16位
选择使用
根据自己的需求:float(4字节,6精度)、double(8字节,最少10精度,一般都是实现15精度) 常用,long double一般用的不是很多,因为我们不需要那么高的精度。
更多推荐
所有评论(0)