上图来自维基百科。
IEEE-754 标准是一个浮点数标准,存在 32、64、128 bit 三种格式(上面两幅图分别是 32 bit 和 64 bit 的情况,结构是一致的),JavaScript 使用的是 64 位,也就是常说的“双精度”,本文将以 64 位举例讲解 IEEE-754 标准。
从图中可知,IEEE-754 标准将 64 位分为三部分:sign,1 bit 的标识位,0 为正数,1 为负数
exponent,指数,11 bit
fraction,小数部分,52 bit
为了举例方便,我们使用下面这串数字介绍 IEEE-754 标准
0100000001101101001000000000000000000000000000000000000000000000
不多不少 64 位,不信的数一数
sign
第 63 位(也是从左到右看的第一个数),在举例中,sign(符号)的值是 0,也就代表着这是一个正数。
fraction
之所以说 0 到 51 位(共 52 位)是 “fraction(小数)”,是因为这段数字在处理时会置于 1.(会有特例,后面会说)之后。
在举例中,属于 fraction 的 52 位是:
1101001000000000000000000000000000000000000000000000
这 52 位数字在本文中简称为 f(f 代指 fraction),加上前面提到需要添加的 1.,所谓的 1.f 是这样的:
1.1101001000000000000000000000000000000000000000000000
如果你问为什么要塞个 1 在前面,我也没查,总之就是这么规定的,这确实是名副其实的“小数”