float,double精度
来源:互联网 发布:java连接数据库的框架 编辑:程序博客网 时间:2024/06/01 21:19
Double与float类型
(1)基本存储方式:与int、long存储方式不同,double与float在内存中是以符号位、指数位与尾数位三部分进行存储的,其中符号位表示数字分正负,占位1位;指数位表示浮点的位置,占位8位,无符号存储,取值范围:0-256,其与实际指数的偏差值为127,尾数表示数值的精度,占位23位。
我们以8.25为例来进行说明:
8.25用二进制表示可表示为1000.01,使用2进制的科学计数法的方式为1.000001*2^3,按照上述方式,符号为+,符号位为1;指数为3,指数位为11;尾数为1,则尾数位为1,其存储方式为:
符号位(1位)
指数位(8位)
尾数位(23位)
1
11
1
注:对于尾数,每个十进制转换成二进制之后,最高位必为1,最高位为0没有意义,所以为了提高取值范围,省略最高位1,也就导致尾数的取值位数是24位。(其中不足位数的前面用0进行补齐)
(2)计算float的精度,精度是指精确到数值的某一位,是指float类型可以表示的数值最大的位数,在十进制中也表示最大的位数。在用二进制表示的时候都是以转换成科学计数法,其最高位为1。在好多博客与知乎都是以2^23= 8388608为由,所以精度是6~7位为准,我在这里不能想通;查阅在wiki的ieee上对此已经进行说明。
这里面的24原因是尾数位数其实也是指取值范围,所以需要将尾数部分全部取到,也是就是实际的23位加上默认的1位,然后转换为10进制,即得到十进制的位数,因此在十进制上其实也就只有7位。
(3)计算float的取值范围:
截图来自wiki,(-1)sign指代符号位,括号里面指代的是数据的精度,隐藏的1是固定不变的,括号右边指代的是指数部分,其中127是差值。这样的话,value的取值范围是根据上式得到的,所以其取值范围是-2^128~2^128。
推论:对于double类型,其推导方式一致,不同的是指数位为11位,尾数位52位,差值1023。
- double,float精度问题
- double,float精度问题
- float,double精度常识
- float double 精度问题
- float、double精度丢失
- [JAVA] float,double精度
- float,double精度
- float 和 double 精度问题
- 转:java float double精度
- java double float 精度计算
- int-float-double精度FloatDemo
- float double精度和范围
- float和double精度问题
- float double范围和精度
- float 和 double 的精度
- 单精度float和双精度double
- 单精度float 和双精度double
- float,double等精度丢失问题 float,double内存表示
- Linux运维常用shell脚本实例
- androidListViewItem倒序显示
- 微信小程序学习笔记——wxss使view填充整个页面
- cocoapods执行命令行报错: You need at least git version 1.8.5 to use CocoaPods
- 如何修改自己电脑的IP地址
- float,double精度
- DELETE_FAILED_INTERNAL_ERROR
- memcached,mongodb和redis三者区别,以及memcached项目实践
- html-鼠标移动后自动旋转
- Fedora 25
- 激光雷达学习笔记(三)特征提取
- Heap size check 堆大小检查
- 批量解压
- 使用卷积神经网络进行图片分类 3