首先,我们知道js中的数字都是双精度的浮点数,在进行计算时,计算机会把十进制数转换成64位二进制,这个过程可能会导致精度丢失。
计算机存储是按照IEEE754标准来把64位分成3个区域
十进制浮点数转换成二进制,然后转换成指数格式,由于尾数部分只能保留52位,第53位0舍1入,所以截取52位导致精度丢失。
以0.1和0.5为例,0.1损失精度,0.5不损失精度
0.1转换成二进制:
0.00011001100110011001100110011001100110011001100110011001100110011001.....无限循环
然后转换成科学计数法表示,右移小数点移动4位,使小数点前的数字是1,变成:
1.1001100110011001100110011001100110011001100110011001100110011001.....无限循环 * 2 ^ -4
然后转换成IEEE754标准:
符号位是0代表正数,
上面得到的指数是-4,所以-4+1023=1019转成二进制,所以指