单精度浮点数与机器精度解析.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单精度浮点数与机器精度解析 一、单精度浮点数 先来简单了解一下浮点数在计算机中的存储方式。根据IEEE 754 标准,单 精度浮点数格式如下(所有位取0 ): 各部分解释 单精度浮点数有32 个二进制位,左侧是高位,右侧是低位。最高位被指定 为符号位,0 代表正数,1 代表负数。指数部分将是2 的幂次,其编码值(即上 表 指数部分对应的八个二进制位)规定为指数的实际值加上偏移值2^7-1=127, 这是为了避免负数,将[-127, 128]映射到[0, 255],这样指数部分编码就可以简单 地编排为。例如指数部分,十进制为8。那么其 所代表的实际指数是8-127=-119,即要乘上2-119 。最后23 位尾数是不包含整数 位的实际有效小数位。规约数的整数位是 1,非规约数的整数位是0 。 规约形式的浮点数与非规约形式的浮点数 指数部分的编码值在[1, 2e-2] 内,且尾数部分的整数位是 1,这样的浮点数 被称为规约形式的浮点数。 指数部分的编码值为0 ,尾数非零,这样的浮点数被称为非规约形式的浮点 数。 规约浮点数的尾数∈[1, 2),而非规约浮点数的尾数∈(0, 1) 。需要注意,非 规约数指数编码,但指数实际值是-126,而非-127 。非规约浮点数被 IEEE 754-1985 标准采用是因为它的渐进式下溢出,而规约浮点数将导致突然式 下溢出,具体原理不再展开。 实际计算 设符号位为 。sign(s)确定正负:sign(0)=1,sign(1)=-1;指数部分为 e ;尾 数部分为f 。用(N)2 表示二进制数N 。 规约形式:sign(s)*2e-127*(1.f)2 非规约形式:sign(s)*2-126*(0.f)2 特殊值和极值 上下溢出值 由浮点数的存储方式可以看出计算机所能表示的浮点数是有限的,我们把所 能表示的最大正值称为上溢值,而把最接近0 的正值称为下溢值。由表二我们看 到上溢值为±3.40e38,下溢值为±1.40e-45。 二、机器精度 Wikipedia 上机器精度Machine Epsilon 是这样描述的:“Machine epsilon gives an upper bound on the relative error due to rounding in floating point arithmetic” 。因 为浮点数是离散的,所以实数的表示存在着误差。例如圆周率这样的无限不循环 小数不可能精确地由某一个浮点数表示。 我们需要一些具体的量去刻画这种误差,以估计结果的准确性。机器精度便 是其中之一:它是所有相对误差的上限。相对误差是绝对误差与精确值的比值的 绝对值。例如一个精确的实数x ,所有单精度浮点数中与x 距离最近的数为y, 绝对误差为|y-x|,相对误差即|y−x|/|x| ,而所有相对误差的上限便是单精度浮点数 的机器精度。 对于32 位浮点数,指数 8 位,尾数为23 位。对于两个指数实际值为E 的 相同的浮点数,若它们尾数部分相差(00000000000000000000001)2,即 2-23 ,易 见它们是相邻的。那么与它们指数相同的实数x 与距x 最近的浮点数y 之间的距 离|y-x|一定小于此相邻两浮点数的距离2-23 * 2E 。可以取x=1.0(或者其他任何数), −23 E 此时实际指数为0 ,所以机器精度是2 ×2 /1.0 。 三、C++程序实现 利用库求值 标准库limits 中的numeric_limits 类中包含了许多算数特殊值: 上溢值: std::numeric_limitsfloat::max(); 规约下溢值: std::numeric_limitsfloat::min(); 非规约下溢值: std::numeric_limitsfloat::denorm_min(); 机器精度: std::numeric_limitsfloat::epsilon(); 其中numeric_limitsfloat 中float 可以换成int ,doubl 等其它类型。 实际二进制存储值 std::s

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档