float, double 的表示范围和精度
float:1bit(符号位)+8bits(指数位)+23bits(尾数位)
double:1bit(符号位)+ 11bits(指数位)+ 52bits(尾数位)
[尾数是指把一个二进制改写成标准的科学计数法 (必须以1.XX的形式,例如1.001*2^1101) 后,小数点后面的小数部分(001)。]
[指数位的第一位也是符号位]
(浮点)数值 =(符号) (1.尾数)×(2)^(带符号的指数)
指数位决定了表示范围:float指数范围 -2^7~2^7-1, 即 -128~127,所以float的范围是 2^-128~2~^127. double同理
尾数位决定了表示精度:float尾数范围 2^23, 即8 388 608, 所以float的精度是二进制的小数点后23位精度,十进制的小数点后6~7位. double同理。
附加:
将一个float型转化为内存存储格式的步骤为:
(1)先将这个实数的绝对值化为二进制格式。
(2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。
(3)从小数点右边第一位开始数出二十三位数字放入第22到第0位。
(4)如果实数是正的,则在第31位放入“0”,否则放入“1”。
(5)如果n是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。
(6)如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。
举例:01101.1100011101 ----->1.1011100011101*(2^11) 则1011100011101存进尾数部分,11存进指数部分。
将一个内存存储的float二进制格式转化为十进制的步骤:
(1)将第22位到第0位的二进制数写出来,在最左边补一位“1”,得到二十四位有效数字。将小数点点在最左边那个“1”的右边。
(2)取出第29到第23位所表示的值n。当30位是“0”时将n各位求反。当30位是“1”时将n增1。
(3)将小数点左移n位(当30位是“0”时)或右移n位(当30位是“1”时),得到一个二进制表示的实数。
(4)将这个二进制实数化为十进制,并根据第31位是“0”还是“1”加上正号或负号即可。
float, double 的表示范围和精度相关推荐
- double取值范围 java_Java中float/double取值范围与精度
Java浮点数 浮点数结构 要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个 ...
- float 范围 java_Java中float/double取值范围与精度
Java浮点数 浮点数结构 要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个 ...
- 关于float/double的取值范围、精度和表示
https://blog.csdn.net/shenziheng1/article/details/79471340 1.float和double的范围和精度 float和double的范围是由指数的 ...
- float和double取值范围和精度问题
1.八种数据类型的分类如下: 第一类:整型 byte short int long 第二类:浮点型 float double 第三类:逻辑型 boolean(它只有两个值可取true false) ...
- 转载——C语言中float,double类型,在内存中的结构(存储方式)
最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...
- C语言的int, float,double相互转化 (从本质上理解可能的问题)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/github_33873969/article/details/78040129 从学了C语言之后,一 ...
- C语言中float,double类型,在内存中的结构(存储方式).
从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度. 任何数据在内存中都是以二进制(0或1)顺序 ...
- android float类型保留两位小数_你知道MySQL中Decimal类型和Float Double的区别吗?
出处:cnblogs.com/panchanggui/p/10766607.html MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,flo ...
- C语言-浮点型(float/double/E)
相关文章:C语言-printf变参函数与它的实参转换/转换模板 float 4个字节 7位精度 double 8个字节 15位精度 long double 8个字节,有些编译器16字节,long do ...
最新文章
- 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...
- liunx 学习笔记-wzq
- 关于“AI是不是胡扯”之争:这是中国科技圈的胜利
- SQL Server 问题之 排序规则(collation)冲突
- ReviewForJob——希尔排序(缩小增量排序)之塞奇威克增量序列
- Fiddler工具杂记-将某些数据收集起来并且发送HTTP数据包
- SQL Server应用程序中的高级SQL注入
- Ubuntu 14.04 更换阿里云源
- 没有安装python如何运行py_在没有安装Python的前提下,让Sublime text编辑器来运行Py?...
- 学习笔记(01):2020软考网络工程师--基础知识视频教程-计算机硬件基础(一)
- Java实现文件上传详解
- C语言lo如何优化运行界面,高质量程序优化总结整理【经典】
- 发送微信模板消息+定时任务
- CMS垃圾回收器详解
- 暑假实习面经 | 华为通用软件开发
- Python 极简插件系统 pluggy 源码剖析
- 三电平逆变器的学习与仿真
- mysqldump: Error: Binlogging on server not active
- bars 除障句完整_日语常用会话1000句(注音版)
- 非root用户安装Anaconda3 + setuptools + phonopy模块