[在Excel中浮点运算可能会给出不准确的结果.docx

[在Excel中浮点运算可能会给出不准确的结果.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[在Excel中浮点运算可能会给出不准确的结果

编号: 78113 - 最后修改: 2011年9月18日 - 修订: 2.0在 Excel 中浮点运算可能会给出不准确的结果查看本文应用于的产品本页展开全部 | 关闭全部概要本文讨论 Microsoft Excel 如何存储和计算浮点数。这可能会因为舍入和/或数据截断而影响某些数...更多信息最大/最小限制所有计算机均能处理的最大数字和最小数字。因为用于存储数字的内存位数是有限的,所以,可以存储的最大数或最小数也是有穷的。对于 Excel,可以存储的最大数是 1.79769313486232E+308,而可以存储的最小正数是 2.2250738585072E-308。我们遵守 IEEE 754 的情况?下溢:当产生了一个因太小而无法表示的数字时,会发生下溢。在 IEEE 和 Excel 中,结果是 0(不同的是 IEEE 有 -0 的概念,而 Excel 没有)。?溢出:当数字因太大而无法表示时,会发生溢出。Excel 使用它自己的特殊表示方法来表示此情况 (#NUM!)。 我们不遵守 IEEE 754 的情况?非规范化数:非规范化数由等于 0 的指数表示。在这种情况下,整个数字存储在尾数中,而且尾数没有隐式的前导 1。因此,会丢失精度,而且数字越小,精度丢失越多。在此范围较小一端的数字只有一位精度。示例: 规范化数有隐式的前导 1。例如,如果尾数表示 0011001,则规范化数会变成因为有隐式的前导 1)。非规范化数没有隐式的前导 1,因此,在 0011001 这个示例中,非规范化数保持不变。在这种情况下,规范化数有八位有效数字 ,而非规范化数有五位有效数字 (11001)(前导 0 不是有效数字)。 非规范化数主要用作一种替代方法,以允许数字小于要存储的正常下限。Microsoft 未实施此规范的这一可选部分,原因是,非规范化数就本质而言具有数量可变的有效数字。这使得计算中可能出现重大误差。?正/负无穷大:被 0 除时会出现无穷大。Excel 不支持无穷大,在此类情况下它会给出 #DIV/0! 错误。?非数字 (NaN):NaN 用于表示无效的运算(例如无穷大除无穷大,无穷大减无穷大,或者 -1 的平方根)。NaN 允许程序略过无效的运算而继续执行。而 Excel 会立即生成错误(例如 #NUM! 或 #DIV/0!)。回到顶端精度浮点数以二进制存储,并分为三个部分,总长度为 65 位:符号、指数和尾数。 1 个符号位11 位指数1 个隐含位52 位尾数 符号存储数字的符号(正或负),指数存储使数字增大或减小到的 2 的幂(最大/最小的 2 的幂是 +1,023 和 -1,022),而尾数存储实际的数字。尾数的有限存储区域限制了两个相近的浮点数能够接近的程度(也即精度)。 尾数和指数均作为独立的成份存储。因此,可能的精度值会因所处理的数字(尾数)的大小而异。对于 Excel,虽然它可以存储从 1.79769313486232E308 到 2.2250738585072E-308 的数字,但它只能在 15 位精度之内这样做。此限制是严格遵循 IEEE 754 规范的直接结果,并且不是 Excel 的限制。其他电子表格程序也具有此精度。 浮点数用以下形式表示,其中指数是二进制指数:X = 分数 * 2^(指数 - 偏差) 分数是数字的规范化分数部分,规范化的原因是指数经过调整,使得前导位始终为 1。这样就不必存储它,而且您额外获得了一位精度。这就是为什么存在隐含位的原因。这与科学记数法类似,在此方法中,您操作指数,以便小数点的左侧有一位数字;除了是二进制以外,您总是可以操作指数,使得第一位为 1(因为只能是 1 和 0)。 偏差是用于避免必须存储负指数的偏差值。单、双精度数字的偏差分别是 127 和 1,023(十进制)。Excel 使用双精度存储数字。回到顶端使用超大数字的示例将下列内容输入新工作簿: A1:1.2E+200B1:1E+100C1:=A1+B1单元格 C1 中的结果值将为 1.2E+200,与单元格 A1 的值相同。实际上,如果使用 IF 函数比较单元格 A1 和 C1(例如 IF(A1=C1)),则结果将为 TRUE。这是由只存储 15 位有效精度数字的 IEEE 规范造成的。若要能够存储上述计算,Excel 将需要至少 100 位精度。回到顶端使用超小数字的示例将下列内容输入至新工作簿: A1: 0.000123456789012345B1: 1C1:=A1+B1单元格 C1 中的结果值将为 1.00012345678901,而不是 1.000123456789012345。这是由 IEEE 规范只存储 15 位精度而导致的。若要能够存储上述计算,Excel 将需要

文档评论(0)

xuetingting + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档