目录
前言
本文讲述float、double的浮点型内存存储方式,浮点型存储和整形存储方式不同,所以字节大小或许一样,但是内容含义不一样。而float和double都涉及到精度问题,那么我们先来说说什么是精度!
精度:用科学记数法表示后,小数点能保留几位有效数字。
例如:11234.2234化成科学记数法,为1.12342234。小数点后有8位,则该精度为8位
注: 浮点型(float和double)在内存中使用科学计数法存储,即一个浮点数有2部分组成:底数m和指数e,而指数e前面还有一位bit位是符号位,即代表了正负。
对了,本文还需要会计算小数的二进制哦
一.Float
如上图,float虽然占有了4个字节,32位bit位,但内存实际被分成了三部分,首位bit代表了符号位,之后8位代表了指数位,最后23位代表了底数位。
符号位: 1位,表示负数,0表示正数
指数位: 8位,表示指数,可表示数据范围(00000000-11111111,对应的十进制为0-255)
因为指数可以是正数也可以是负数,IEEE754标准规定:指数减去127才是实际的指数(这是规定)
float的指数表示范围是-127到128;
底数位:只存储23位,最大值为2^23=8388607(7位数),由于我们输入的是十进制,因此对应十进制数为7位,故该float型的精度为7~8位有效数字(有的编译器为7位,有的为8位)
float精度的展示:
二.double
符号位: 1位,表示负数,0表示正数
指数位: 11位,表示指数,可表示数据范围(00000000000-11111111111,对应的十进制为0-2047)
因为指数可以是正数也可以是负数,IEEE754标准规定:指数减去1023才是实际的指数(这是规定)
double的指数表示范围是-1023到1024;
底数位:只存储52位,最大值为2^52=4503599627370496(16位数),由于我们输入的是十进制,因此对应十进制数为16位,故该double型的精度为16~17位有效数字(有的编译器为16位,有的为17位)
三.float和double对比
(1)在内存中占有的字节数不同
- 单精度浮点数在机内占4个字节
- 双精度浮点数在机内占8个字节
(2)有效数字位数不同
- 单精度浮点数有效数字7/8位
- 双精度浮点数有效数字16/17位
(3)所能表示数的范围不同
- 单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38
- 双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308
(4)在程序中处理速度不同
一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快。