javascript现代编程系列教程之三——数值表示方式

发布时间 2023-06-14 15:51:54作者: GroundSoft

在64位浮点数的表示中,我们使用了一个叫做"偏移二进制"的技术来存储指数。这是因为我们需要在有限的位数(在这种情况下是11位)内表示正数和负数。
让我们更详细地解释一下:

  1. 符号位:浮点数的最高位是符号位,0代表正数,1代表负数。
  2. 指数部分:接下来的11位用于存储指数。但是,这个值并不直接表示指数。相反,它被看作是一个无符号整数,并且在计算前需要减去一个固定的"偏移量"(在这种情况下是1023)。所以如果这11位的值是e,那么真正的指数其实是 e - 1023
    这样做的目的是为了能够在同样的位数内表示更大范围的指数。例如,如果这11位的值是2046,那么真正的指数是 2046 - 1023 = 1023;如果这11位的值是1024,那么真正的指数是 1024 - 1023 = 1。也就是说,通过这种方式,我们可以用11位表示从-1022到1023的指数范围。
  3. 尾数部分:剩下的52位用于存储尾数。这些位表示的是二进制小数,即形如0.1、0.01、0.001等的值。
    让我们来看一个具体的例子:
    假设我们有一个64位浮点数,其二进制表示为:
    0100000001111111111111111111111111111111111111111111111111111111
    这个数的符号位是0,所以它是一个正数。
    指数部分的值是 10000000111(二进制),转换成十进制是1039。但是,我们需要减去偏移量1023,所以真正的指数是 1039 - 1023 = 16
    尾数部分的值是 1111111111111111111111111111111111111111111111111111(二进制),这是一个二进制小数,表示的是 (1/2) + (1/4) + (1/8) + ... = 1
    所以,这个浮点数的值是 1 * 2^16,也就是65536。
    希望这个详细的解释可以帮助你理解!