float与double类型的范围和精度
来源:互联网 发布:stc单片机pwm输出频率 编辑:程序博客网 时间:2024/05/02 03:08
转自:http://www.cnblogs.com/tekson/archive/2009/07/16/1524604.html
0 背景知识
根据国际标准IEEE 754,任意一个二进制浮点数V可以表示成下面的形式:
V = (-1)^s×M×2^E
(1)(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
(2)M表示有效数字,大于等于1,小于2。因为整数肯定是1,所以保存时忽略1,计算时再加1。
(3)2^E表示指数位。
例如:十进制0.1的二进制为:0.00011001100110011001100110011001100...
按照上面规格化要求,改成1.1001100110011001100*2^(-4)
32位浮点float表示0x3DCCCCCC,实际VC编译后对应的是0x3DCCCCCD,应该和无法整除数值的进位取舍有关,对应二进制:0,01111011,10011001100110011001101,其中
符号位:0
指数位:01111011 = -4 2^(-4)=0.0625
尾数为:100 1100 1100 1100 1100 1101 = 5033165/(2^23) = 5033165 / 8388608 =0.6000000238418579
分别将各部分对应的十进制相乘1*0.0625*(1+0.6000000238418579)=0.10000000149011611875
1 内存分配
每个float类型4字节,double类型8字节,以科学计数法的指数+尾数形式表示,
具体分布如下(高位在前,低位在后):
float(共32位) :1bit(符号位) 8bits(指数位) 23bits(尾数位)
double(共64位):1bit(符号位)11bits(指数位) 52bits(尾数位)
以float类型为例:0x00000000表示0,0x80000000表示-0,即最高位为符号位
2 范围
float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位。于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位float(+127)double(+1023)的形式来表示的(IEEE745)。
以float类型为例,十进制1的float类型指数为01111111(即0+127),2的指数为10000000(即1+127),3也是10000000(即1+127),4为10000001(即2+127)
负指数(小于127)决定了所能表达的绝对值最小的非零数;而正指数决定了所能表达的绝对值最大的数,即范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;
double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
3 精度
以 IEEE 单精度格式表示的 a 具有多少个有效十进制数字;或者当用户以 IEEE 单精度 格式表示 x 时,可以确信有多少十进制数字是准确的?
有效十进制数字的个数始终介于 6 和 9 之间,即至少有 6 个数字是准确的,但准确数字不会超过 9 个 (如果转换是准确的,则准确数字个数不受此限制,此时可能有无限多个准确数字)。
相反,如果将 IEEE 单精度格式的二进制数转换为十进制数,然后再将其转换回二进制,则通常需要使用至少 9 个十进制数字,以确保经过两次转换后仍可以得到原始的数字。
双精度有效十进制数字的个数介于15和17之间。
原文地址:http://blog.sina.com.cn/s/blog_671c54fe0102vm8r.html
0 0
- float 与double类型范围和精度
- float 和 double类型范围与精度
- float与double类型的内存分布,精度和范围
- float与double类型的内存分布,精度和范围
- float与double类型的内存分布,精度和范围
- float与double类型的内存分布,精度和范围
- float与double类型的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- float与double的范围和精度
- __FILE__,__LINE__
- Acm课程总结
- HDOJ 3501 Calculation 2
- jQuery请求网络(Access-Control-Allow-Origin)
- 开发环境、测试环境、生产环境区别
- float与double类型的范围和精度
- 特别响、非常近——BPMN2新规范与Activiti5
- Android 轻松实现后台搭建+APP版本更新
- 树莓派----01_汉化和本地时间
- 如何基于Python构建一个可扩展的运维自动化平台
- 实参与形参的区别
- HTML
- 【bzoj1828】[Usaco2010 Mar]
- Android之对话框AlertDialog及其子类的介绍(一)