计算机如何存储浮点数。?

How do computers store floating point numbers.?

对于正数,二进制很容易求出来。对于负数,它是正数的 2 的补码。我有疑问计算机如何存储或理解浮点数?我在网上看到许多解释在我们写作时通常将浮点数显示为一个点。但是真正的计算机如何在内部存储或使用它?

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

一个浮点数是±significandbaseexponent 具有固定的 base 和对 significandexponent 的某些要求。 exponent 是格式定义的范围内的整数,significand 是使用一些基数的数字表示的数字-base 位数,其中位数由格式定义。

此基本格式可能会有所不同。例如,有效数字可能包含 radix point(小数点的一般化),因此格式可能具有全为整数的有效数字(137.、954. 和 son )或者小数点位于其他某个固定位置(通常就在第一个数字之后,如 1.37、9.54 等)。这些变化是等效的,指数范围被调整以进行补偿。

因此,+1.23456•1013是一个六位十进制数的十进制浮点数。点“浮动”是因为我们乘以有效移动小数点的底的幂。

在此表示级别上,浮点格式可能包含一些特殊值,特别是 +∞、−∞ 和 NaN(表示未表示数字的非数字“值”)。

另一个最感兴趣的级别是将浮点数编码为位串。使用 IEEE-754 双精度,它是这样完成的:

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

But how do the real computers store or work with it internally?

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

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

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