CPP学习之——浮点型变量(4.10)
一 前言
本节学习float浮点型变量 :
- 长度为4个字节,是32位二进制。取值范围为1.2e-38(2*2^-126)-3.40e+38(2*2^128)
- 0 00000000 00000000000000000000000
- 符号 指数位(偏码为127) 尾数未(共23位,省略了最高位的固定整数1)
二 浮点概述
- 符号位为零是正,为1为负.
- 指数位共八位,可表示0
255或者-126128. - 由于它的取值范围是由指数来定的,所以剩余尾数23位,最多可表示2*2^23个有效数字,以10为底的对数为log10(2*2^23)=6.92,因此它的有效数字为6~7位。
三 代码及结果
3.1 代码
1 | #include<iostream> |
3.2 输出结果
1 | 12.3457 |
四 原因分析
- float数据的精度为6~7位,后面的数据舍弃掉了
五 如何保留精度
5.1 使用iomanip中的setprecision指定显示
1 | #include<iomanip> |
5.2 使用double表示
- double 占用8个字节,比float多占一倍,因此它的精度也大了一倍
- 这样double的有效数字就是15或者16位
六 double 型数据
6.1 概念
- 长度为8个字节,是64位二进制。取值范围为2.2e-308(2*2^-1022)-1.80e+308(2*2^1024)
- 0 11个0 52个0
- 符号 11个偏码表示的指数位(偏值1023) 尾数位(共52位,省略了最高位的固定整数1)
- 符号位为零是正,为1为负
- 指数位共11位,可表示0
2047或-10221024 - 由于它的取值范围是由指数来定的,所以剩余尾数52位,最多可表示2*2^52个有效数字,以10为底的对数为log10(2*2^52)=15.65,因此它的有效数字为15~16位。
6.2 Double和float的区别
- 对编程人员来说,double和float的区别是double精度高,有效数字15
16位,float精度67位。 - 但double消耗内存是float的两倍,double的运算速度比float慢的多,能用单精度时不要用双精度(以省内存,加速运算速度)