免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8468 | 回复: 7

关于实数的数值范围和有效数字位数 [复制链接]

论坛徽章:
0
发表于 2004-06-09 11:19 |显示全部楼层
关于C/C++里,实数的数值范围和有效数字位数是由什么来确定的?
比如:32位的机里,基本位32位。而浮点数的位数怎么确定的呢?
一般情况下,单精度浮点数的有效位数是7位,双精度的有效位数是17位,这是根据什么来确定的。

谢谢!

论坛徽章:
0
发表于 2004-06-09 15:02 |显示全部楼层

关于实数的数值范围和有效数字位数

单精度:2^24>;10^7

论坛徽章:
0
发表于 2004-06-09 15:39 |显示全部楼层

关于实数的数值范围和有效数字位数

原帖由 "Jerrybuct" 发表:
关于C/C++里,实数的数值范围和有效数字位数是由什么来确定的?
比如:32位的机里,基本位32位。而浮点数的位数怎么确定的呢?
一般情况下,单精度浮点数的有效位数是7位,双精度的有效位数是17位,这是根据什么来..........


C/C++中浮点数的表示遵循IEEE 754标准。一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M(如图)。十进制数的换算计算公式为(n^m表示n的m次幂,B表示前面的数字是二进制):

  1. S * 2^(E-127) * (1.M)B
复制代码

浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。

单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。

双精度的尾数用52位存储,2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,所以双精度的有效位数是16位,而不是你说的17位。但是因为这个数字很接近10^17,你说双精度数有17位有效数字的正确性为90%。

IEEE 754 浮点数格式

IEEE 754 浮点数格式

论坛徽章:
0
发表于 2004-06-09 18:14 |显示全部楼层

关于实数的数值范围和有效数字位数

good

论坛徽章:
0
发表于 2004-06-12 16:08 |显示全部楼层

关于实数的数值范围和有效数字位数

对与3楼所说的公式我到现在还是不懂,有没有办法在详细一点了?

论坛徽章:
0
发表于 2004-06-12 16:47 |显示全部楼层

关于实数的数值范围和有效数字位数

举一个线程的例子说明浮点数的算法:
S        E                                  M
1 100 0001 1 001 0110 00000000 00000000

与之对应的十六进制整数为 0xc1960000。

已知:
S = -1 (如果S位为0代表正数,为1代表负数)
E = 10000011B = 131D
1.M = 1.001011B = ( 1 + 11/64)D

根据计算公式:
S * 2^(E-127) * (1.M)B  = -1 * 2^(131-127) * (1 + 11/64) = -18.75

所以这四个字节如果用来表示单精度浮点数的话,其值为 -18.75D。

论坛徽章:
0
发表于 2004-06-12 17:44 |显示全部楼层

关于实数的数值范围和有效数字位数

感兴趣的话可以看一下组成原理

论坛徽章:
0
发表于 2008-05-08 15:50 |显示全部楼层
单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。

为什么精度是这样确定的?为什么是2^(23+1),而不是2^(-(23+1))?

另外,想167772160,1677721600这样的整数,用float表示也是精确的,它们的尾数后面很多位都刚好是0,这样能不能说有效位对某些float数来说,可以达到7位以上呢?

[ 本帖最后由 windy.sunrise 于 2008-5-9 10:17 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP