【问题标题】:How do computers store floating point numbers.?计算机如何存储浮点数。?
【发布时间】:2021-10-25 05:35:09
【问题描述】:

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

【问题讨论】:

  • 他们使用称为 IEEE 754 的标准。我相信您可以找到无数视频和网站,详细解释其工作原理。
  • 请注意,2's-complement 的目的是消除正表示和负表示之间的区别。否则,您可以简单地做与浮点值相同的事情:将符号位与绝对值分开存储。格式更简单,但涉及此类有符号值的操作变得更加复杂。浮点运算中已经存在复杂的因素,因此使用更简单的有符号幅度形式没有额外的惩罚。
  • " 真正的计算机在内部存储或使用它?" --> 差不多,只是有一些额外的标志。但存储工作是不同的。这就像在问文本是如何编写的与我们的大脑如何理解它。

标签: floating-point numbers storage computer-science


【解决方案1】:

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

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

这种基本格式可能会有所不同。例如,有效数字可能包括一个小数点(小数点的概括),因此格式可能具有全为整数(137.、954. 和儿子)的有效数字或具有其他固定位置的小数点(通常就在第一个数字之后,例如 1.37、9.54 等)。这些变化是等效的,通过调整指数范围来进行补偿。

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

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

另一个最有趣的层面是将浮点数编码为位串。对于 IEEE-754 双精度,它是这样完成的:

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

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

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

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

存在各种复杂情况,例如必须处理指数的界限,需要在算术之后将有效数字转换为正常形式(前导数字不为零)等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    相关资源
    最近更新 更多