IEEE舍入规则.doc

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

IEEE的舍入规则 (2007-01-30 13:48:06) HYPERLINK javascript:; 转载 ? 汇报上来一个anoamly,说做四舍五入的时候 22.5会近似成22 但是23.5会近似成24 QA觉得这是一个BUG,因为里面对同一个四舍五入采用了两套计算方式. 第一反应就是可能四舍五入的算法是自己写的,因为老美再闲也不会去做这种挫事. 研究了下发现凡是整数位是偶数的,小数位为0.5的都会被降下来round down,但是整数位为奇数的,小数位为0.5的都会升上去round up.当时就去检查c++写的源代码,发现匈牙利命名法果然害人,可追踪性明显不行,只能写report给鬼子说搞不定. 第二天鬼子说这是by design的,根据IEEE规则的,然后就兴匆匆的去和Martin讲,心里想的是,总算这个PTR不关我事了.没想到聪明如老马,居然不晓得IEEE是啥,无语,石化3秒钟后解释未果,继续研究 尝试去IEEE.org寻找标准答案,发现不是业内人士,没有account,办事受阻,许多资料都不给看.想申请个帐号还要交美元,罢了,就弄点中英文野鸡资料看看了. 最后找到答案: 目前采用的舍入规则遵循IEEE标准754的第4节,最贴近我们生活的就是那些Math.Round()函数,需要提供两个参数,一Double型的value,一Int型的精度范围在(0-15). 此函数的返回值为精度等于digits的、最接近value的数字。如果value在两个数字中间,比如4.5就是在4和5,则返回最靠近的那个偶数,如果是-5.55则返回-5.6。此方法叫做就近舍入,又叫银行家舍入,从后面的那个别名大家应该能够猜得出点什么吧嘿嘿。欧洲所有的银行和几乎所有工厂均采用此方式. 这种方式比较中和,简记起来就是4舍6入5取偶 因为5之前有1,2,3,4后面有6,7,8,9,如果采用传统模式一味的进,容易使数字整体偏大. 而采用就近取舍的话,因为数字前后遇到偶数的概率均等,可以使大量统计运算结果精度提高. 微软的那套东西基本都默认采用了IEEE的标准,包括VB,C++,C#,J#还有个JS. 但是JAVA似乎默认还是四舍五入的方式. 下面还有几种IEEE的舍入标准: 上舍入,下舍入,舍入到零. 上舍入顾名思义,就是始终向正无穷方向取舍. 下舍入则始终向负无穷发祥取舍 舍入到零则是向最靠近零的地方取舍 下面是JAVA的舍入模式 UP public static final HYPERLINK /Java_Docs/html/zh_CN/api/java/math/RoundingMode.html \o java.math 中的枚举 RoundingMode UP 远离零方向舍入的舍入模式。始终对非零舍弃部分前面的数字加 1。注意,此舍入模式始终不会减少计算值的绝对值。 示例: 输入数字 使用 UP 舍入模式 将输入数字舍入为一位数 5.5 6 2.5 3 1.6 2 1.1 2 1.0 1 -1.0 -1 -1.1 -2 -1.6 -2 -2.5 -3 -5.5 -6 DOWN public static final HYPERLINK /Java_Docs/html/zh_CN/api/java/math/RoundingMode.html \o java.math 中的枚举 RoundingMode DOWN 向零方向舍入的舍入模式。从不对舍弃部分前面的数字加 1(即截尾)。注意,此舍入模式始终不会增加计算值的绝对值。 示例: 输入数字 使用 DOWN 舍入模式 将输入数字舍入为一位数 5.5 5 2.5 2 1.6 1 1.1 1 1.0 1 -1.0 -1 -1.1 -1 -1.6 -1 -2.5 -2 -5.5 -5 CEILING public static final HYPERLINK /Java_Docs/html/zh_CN/api/java/math/RoundingMode.html \o java.math 中的枚举 RoundingMode CEILING 向正无限大方向舍入的舍入模式。如果结果为正,则舍入行为类似于 RoundingMode.UP;如果结果为负,则舍入行为类似于 RoundingMode.DOWN。注意,此舍入模式始终不会减少计算值。 示例: 输入数字 使用 CEILING 舍入模式 将输入数字舍入为一位数 5.5 6 2.5 3 1.6 2 1.1 2 1.0 1 -1.0 -1 -1.1 -1 -1.6 -1 -2.5 -2 -5.5 -5 FLOOR public static final HYPERLINK /Java_Docs/html/z

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档