- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IEEE的舍入规则IEEE的舍入规则
IEEE的舍入规则
(2007-01-30 13:48:06)
转载
汇报上来一个anoamly,说做四舍五入的时候22.5会近似成22但是23.5会近似成24QA觉得这是一个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 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 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 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 RoundingMode FLOOR
向负无限大方向舍入的舍入模式。如果结果为正,则舍入行为类似于 RoundingMode.DOWN;如果结果为负,则舍入行为类似于 RoundingMode.UP。注意,此舍入模式始终不会增加计算值。
示例:
输入数字 使用 FLOOR 舍入模式将输入数字舍入为一位数 5.5 5 2.5 2 1.6 1 1.1 1 1.0 1 -1.0 -1 -1.1 -2 -1.6 -2 -2.5 -3 -5.5 -6
HALF_UP
public static final
文档评论(0)