美文网首页
JavaScript中的安全整数

JavaScript中的安全整数

作者: 假装会编程 | 来源:发表于2017-03-22 14:47 被阅读0次

在做题的时候遇到一个好玩的问题:

题目

鉴于这一系列题目答案都比较出人意料,加上隐隐感觉2^53可能达到JS中数值的一个极限我选了other,算是蒙对了,但是究竟是为什么呢?

参考答案中提示说是2^53是JS中可能取到的最大值,觉得哪里怪怪的,自己试试水:

Chrome测试结果

可以看到+1的时候没有变化,而+2和+10086则取到了更大的值。有猫腻?

搜集资料得到的结论:

  • JS中只有一种类型数,即64位(1bit 的符号位,11bits 的指数部分 ,以及52bits 的小数部分)双精度浮点数,当整数数值过大时,就会发生精度丢失。
  • 所谓安全整数即能够唯一确定的数字,即能够使用64位二进制数唯一确定的整数。考虑253,转换成对应表示方式后其小数部分总共包括53位,发生了精度丢失,所以在JS中无法区别253与2^53+1;
  • 安全整数与JS是否能够正确进行运算关系密切,当运算数与运算结果都处于安全整数的范围内时,才能保证JS运算结果正确。

参考资料
https://www.zhihu.com/question/29010688
http://2ality.com/2013/10/safe-integers.html
http://2ality.com/2012/04/number-encoding.html

相关文章

  • JavaScript中的安全整数

    在做题的时候遇到一个好玩的问题: 鉴于这一系列题目答案都比较出人意料,加上隐隐感觉2^53可能达到JS中数值的一个...

  • LeetCode7.整数反转 JavaScript

    LeetCode7.整数反转 JavaScript 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字...

  • JavaScript 中的 BigInt 类型

    Number 的安全范围 和别的强类型编程语言(比如说 C,Java)不同,JavaScript 不区分整数值和浮...

  • JavaScript 基础之Number 对象(五)

    所有 JavaScript 数字均为 64 位。JavaScript中,数字不分为整数类型和浮点型类型,所有的数字...

  • 你不知道的JavaScript

    变量和值 JavaScript 整数最大能达到53位。 | 0 可以将变量a 中的数值转换为32 位有符号整数,因...

  • javascript中0.1+0.2背后的原理

    浮点数的存储 首先要搞清楚javascript如何存储小数的,它和其他语言存储,javascript中的整数和小数...

  • js中的数字

    Number对象 可表示的最大的数 Math对象 js中的最大整数 安全整数 当整数数值过大时,就会发生精度丢失 ...

  • IOS上webView中使用html5 video的问题

    由于苹果的安全策略问题,禁用了JavaScript中video的autoplay。所以通过javascript调用...

  • JS-运算符

    JS的算术运算符 JavaScript的算数运算和C语言几乎一样与C语言不同的是: 在JavaScript中整数除...

  • JavaScript运算符注意点

    算术运算符 和C语言不同的是JavaScript中整数除以整数结果是小数 任何值和NaN运算, 得到的结果都是Na...

网友评论

      本文标题:JavaScript中的安全整数

      本文链接:https://www.haomeiwen.com/subject/irsonttx.html