计算机如何存储浮点数?



对于正数,二进制可以很容易地找到。对于负数,它是正数的2的补。我有一个疑问,计算机如何存储或理解浮点数?我在网上看到很多解释,通常在我们写作的时候把浮点数当作一个点。但是真正的计算机是如何在内部存储或使用它的呢?

浮点数有多个级别的表示。以下是人们最感兴趣的两个层次的信息。

浮点数是±有效基数指数,具有固定的基数和对有效指数的一定要求。指数是一个由格式定义的范围内的整数,有效值是一个可以用一些基数基数位数表示的数字,其中位数由格式定义。

这个基本格式可能有变化。例如,有效数可以包括一个基数(小数点的泛化),因此格式的有效数可能都是整数(137)。, 954年。或者基数点位于其他固定位置(通常在第一位数字之后,例如1.37、9.54,等等)。这些变化在数学上是等价的,指数范围进行了调整以补偿。

因此,+1.23456•1013是一个六位十进制浮点数。这个点会"浮动",因为我们乘以了基数的幂,从而有效地移动了基数。

在这种表示级别上,浮点格式可能包括一些特殊值,特别是+∞,−∞和nan(非数字"值",表示不表示任何数字)。

另一个最令人感兴趣的层次是将浮点数编码为位字符串。使用IEEE-754双精度,可以这样做:

  • 以±显著性•2指数的格式写入数字,其中显著性表示为53位二进制数,基数在第一位数字之后,指数为[−1022,+1023]。如果指数不是−1022,的有效位数必须为1。(如果不是,则从指数中减去1并将有效位左移一位,直到指数为- 1022或有效位的第一位数字为1。任何不能用这种格式表示的数字都不能用IEEE-754双精度表示。
  • 对于+,写"0"。对于"−"写"1"。
  • 如果有效的第一位数字为零,则写"00000000000"。这是一种特殊的指数代码,表示次正规数,即不能移动到第一个位为1的数字。如果第一个数字不为零,则将指数加1023,将其转换为11位二进制数,然后写入该数字。例如,指数- 3偏置为1020,其二进制为"011111111100",因此写入"011111111100"。
  • 将有效位的52位写在第一位数字后。

但是真正的计算机如何在内部存储或使用它呢?

一旦我们像上面那样编码了浮点数,计算机就可以处理这些部件了。有效数的行为在很大程度上像整数,指数告诉我们如何移动它们。

当两个相同符号的数相加时,比较它们的指数。根据指数的不同,一个数字的意义被移动,以调整其相对于另一个数字的位置。然后将两个有效数相加,并调整结果(必要时四舍五入)以适应浮点格式。当两个数相乘时,它们的有效数相乘,它们的指数相加。减法、除法和其他运算以同样的方式进行,通过对表示的部分进行操作。

有各种各样的复杂性,例如必须处理指数的界限,需要在算术后将有效位数转换为标准形式(前导数字不为零),等等。

最新更新