- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
下面小编就为大家带来一篇浅谈 JavaScript中小数和大整数的精度丢失.小編覚得挺不
错的.现在就分享给大家.也给大家做个参考.
先来看两个问题:
0.1 ? 0.2 ― 0.3; // false
9999999999999999 == 10000000000000000: II true
第一个问题是小数的精度问題.在业界不少博客里已有讨论.第二个问題.去年公司有 个系统的数据库在做数据订正时. 发现有部分数据重复的诡异现象.
本文将从规范出发.对
上 十进割0.1的二进制为0.0 0011 0011 0011…(据环0011)
十进制0.2的二进制为0.0011 0011 0011…(循环0011)
0.1 ? 0.2相加可衰示为:
n bsp; n bsp;e = 4 m 二 1.10011001100. .1100 ( 52 位)
n bsp;* e ? -3; m ? 1.10011001100. ..1100 ( 52 位)
n bsp; n bsp;e - -3; m =
0.11001100110...0110
n bspr e = -3; m = 1.10011001100 ..1100
n bsp; n bsp:e ?3; m =10.01100110011 ...00
= = . 1
n bsp产 0 01001100110011.. 001
n bsp产 0.30000000000000004 (+ 进制)
根据上面的演算?还可以得出一个培论:当十避制小數的二进制駐示的有限数字不超过
52位时,在JavaScript里是可以精确存储的.比如:
0.05 ? 0.005 == 0.055 II true
进一歩的规律,比如,
0 05 * 0.2 == 0.25 // true 符号位取正.52位尾数全填充1,制如取最大値
971.S
然.答案依旧是Number.MAX_VALUE.
我们的问题究竟是什么虎?回到起始代码:
9999999999999999 == 10000000000000000; // true
很明S. 16个9还远远小干308个10.这个问通与MAX.VALUE没什么关系.还得归国到尾数 E只有52位上来.
可以用代码来描述:
varx = 1;〃为了减少运算星,初始值可以设大一点,比如 Math.pow (2, 53)?
10
while (x!=x* 1) x
//x = 9007199254740992 即 25
也就是说.当x小干等于25时.可以瞞保x的椅度不会丢失.当x大于25时.x
的精度有可能会丢失.比如:
x为25 I时.其二进制衰示为:
10000000000...001 (中间共有 52 个 0)
用双II度浮点数存储时:
e = 1;m = 10000. 00 (共 52 个 0.其中 1 是 hidden bit)
显A这和25的存储是一样的.
按照上面的思路可以推出.对于 25 ? 2.其二道制为100000?0010
(中间51个0).
也是可以精确存储的.
规律:当x大于25且二进制有效位效大于 53位时.就会存在相度丢失.这和小数
的精度丢失本质上是一样的.
hidden bit 可参考:A tutorial about Java double type.
小話
小数和大整数的精度芸失,井不仅仅在JavaScript中存在.严格来说,使用了 IEEE
754
浮点数格式来存储浮点类型的任何编程语言(
C/C**/C#/Java等等)都存在消度丢失问题.
在C#,Java中,提供了 Decimal. BigDedmal封装类来进行相应的处理.才避开了精度 丢失.
注:ECMAScript 规范中.巳有 nbsp;decimal proposal.但目前尚未核正式采纳.
曰
S5后考考大那,
Number.MAX_V ALUE ? 1 == Numer.MAX_V ALUE;
Number.MAX_V ALUE *2== Numer.MAX_V ALUE;
Number.MAX.V ALUE ? x == Numer.MAX.V ALUE;
Number MAX_V ALUE 1 = Infinrty;
Number.MAX_V ALUE * Number.MAX_V ALUE == Infinity;
〃问题:
//1.x的值是什么?
// 2. Infinrty ? Number.MAX_V ALUE == x ? 1;是 true 还是 false
?
以上这爲浅淡JavaScript中小数和大整教的精度丢失就是小增分享给大家的全部内容
7.希望能给大宗一个参考
您可能关注的文档
- 平瓦屋面检验批质量验收记录表.docx
- 平面设计应聘作品集pdf.docx
- 年度工作总结与自评表.docx
- 幼儿园中班社会教案:快乐超市.docx
- 幼儿园亲子运动会活动方案.docx
- 幼儿园会议记录精编版.docx
- 幼儿园卫生保健工作计划范文精选.docx
- 幼儿园卫生保健工作计划3篇.docx
- 幼儿园传染病工作应急预案7.docx
- 幼儿园学前教育宣传画报.docx
- 济南市天桥区事业单位绩效考核登记表【模板】.docx
- 济南市市中区公开招聘诉调对接工作人员岗位需求表【模板】.docx
- 浙江工业大学青说青听青年科学家理论宣讲团成员推荐表【模板】.docx
- 浙江大学城市学院班主任学期考核表【模板】.docx
- 浙江师范大学第四届化工设计竞赛评分标准【模板】.docx
- 浙江教育学院2006学年第二学期劳动课安排表【模板】.docx
- 浙江省各级国家机关、事业单位和社会团体2016-2017年度各协议供货项目合同【模板】.docx
- 浙江音乐学院全日制本科教育课程建设项目申报表【模板】.docx
- 海南师范大学年教师进修申请表【模板】.docx
- 涂料防水层检验批质量验收记录表.docx
原创力文档


文档评论(0)