JavaScript 符号位、指数位、尾数位

1. JavaScript中数字的存储标准是 IEEE754 浮点数标准。代码中使用的不管是整数仍是小数,都是同一种数据类型——64 位双精度浮点型ip

全部数字以二进制存储,每一个数字对应的二进制分为三段:符号位、指数位、尾数位。内存

用于存储的二进制有 64 位,其中符号位在六十四位的第一位,0 表示正数,1 表示负数。符号位以后的 11 位是指数位,决定了数字的范围。指数位以后的 52 位是尾数位,决定了数字的精度。循环

2. 在 JavaScript 中,双精度浮点型的数转化成二进制的数保存,读取时根据指数位和尾数位的值转化成双精度浮点数。数据类型

好比说存储 8.8125 这个数,它的整数部分的二进制是 1000,小数部分的二进制是 1101。这两部分连起来是 1000.1101,可是存储到内存中小数点会消失,由于计算机只能存储 0 和 1。二进制

1000.1101 这个二进制数用科学计数法表示是 1.0001101 * 2^3,这里的 3 (二进制是 0011)即为指数。数据

如今咱们很容易判断符号位是 0,尾数位就是科学计数法的小数部分 0001101。指数位用来存储科学计数法的指数,此处为 3。指数位有正负,11 位指数位表示的指数范围是 -1023~1024,因此指数 3 的指数位存储为 1026(3 + 1023)。计算机

能够判断 JavaScript 数值的最大值为 53 位二进制的最大值: 2^53 -1。浮点数

PS:科学计数法中小数点前的 1 能够省略,由于这一位永远是 1。0.5 二进制科学计数为 1.00 * 2^-1。数字

3. 最后来讲一下浮点数精度的问题。不少人都知道,两个浮点数相加时,结果会有一些偏差。好比 0.1 + 0.2 的结果是 0.30000000000000004。

这是由于 0.1 和 0.2 用二进制表示时为 0.0001 1001 1001 1001...(1100循环) 和 0.0011 0011 0011 0011...(0011循环)。若是截取于第 52 位,就会获得一个有偏差的结果。

相关文章
相关标签/搜索