1.计算机的运算方式
javascript 中整数和浮点数都为 Number 类型,都以 64 位浮点数形式存储,计算机在做数值运算时,先转换为二进制,再进行运算
整数的二进制转换:除 2 取余数,若商不为 0 则继续对它除 2,当商为 0 时则将所有余数逆序排列
浮点数点二进制转换:整数部分按整数二进制转换,小数部分,乘 2 取整数部分,若小数不为 0 则继续乘 2,直至小数部分为 0 将取出的整数位正序排列。(若小数部分无法为零,根据有效位数要求取得相应数值,位数后一位 0 舍 1 入进行取舍)
例如: 0.1 转二进制
0.1 * 2 = 0.2 - - - - - - - - - - 取 0
0.2 * 2 = 0.4 - - - - - - - - - - 取 0
0.4 * 2 = 0.8 - - - - - - - - - - 取 0
0.8 * 2 = 1.6 - - - - - - - - - - 取 1
0.6 * 2 = 1.2 - - - - - - - - - - 取 1
0.2 * 2 = 0.4 - - - - - - - - - - 取 0
...
二进制表示:0.000110.....
当出现无限循环的时候,js 数值运算就会出现相应的误差
js 精度
IEEE 754 标准定义了单精度和双精度浮点格式,每个浮点数均由 3 个部分组成:符号位 S,指数部分 E 和尾数部分 M
单精度
1 位符号位,8 位指数位,23 位有效位
双精度
1 位符号位,11 位指数位,52 位有效位