【问题标题】:Adding 1 to a floating point number in MIPS doesn't change the number?MIPS中的浮点数加1不会改变数字吗?
【发布时间】:2012-04-17 14:37:21
【问题描述】:

在我的计算机体系结构 CS 作业中,我遇到了这个有趣的问题。我的教授希望我们找到一个单精度数和一个双精度数,这样当你给它们中的任何一个加 1 时,这个数字根本不会改变。为什么这是有道理的,我怎样才能找到这些数字??

谢谢!

【问题讨论】:

标签: floating-point mips computer-architecture


【解决方案1】:

请记住,浮点数的精度有限(它们可以跟踪的有效位数)。对于大约 7 位的单精度浮点数,对于大约 16 位的双精度浮点数。

另外请记住,浮点数的范围可以超过 3 x 10^38 - 所以显然不是所有的数字都很重要。

【讨论】:

  • 我知道,对于单精度,有 1 个符号位,然后是 8 个指数位,然后是 22 个小数位。但是我怎样才能用它来找到号码呢?
  • @roboguy12:我认为您不一定需要关注这种详细程度。想一想当您处理只有 3 个有效数字的数十亿个数字并将 1 添加到 234,000,000,000 时会发生什么。如果只保留 3 位有效数字会怎样?
  • @roboguy12:对于单精度,它是一个符号 + 八个指数 + 二十四个尾数 = 总共 33 位。由于尾数是向左调整的,因此最左边的位将始终为 1,并且当数字存储在内存中的 4 字节/32 位位置时可以省略。
【解决方案2】:

浮点数学基于二进制(以 2 为底)数字系统。这里的许多答案都会谈到十进制系统(以 10 为底)上下文中的精度和值。这会导致(例如)不同浮点格式的最小值和最大值呈现奇怪的值。

单精度尾数中的 24(1 隐含 + 23 显式)位转换为 24 位二进制数字的精度。设置最高位的最低 24 位数字是 2^23,它转换为 800000 十六进制或 8388608 十进制(七位有效十进制数字)。设置最高位的最高数字是 2^24-1,它转换为 ffffff 十六进制或 16777215(八位有效十进制数字)。所以现在你知道上面提到的“7-8 位精度”是从哪里来的。我个人认为二进制解释清楚地解释了事情,而十进制解释通常会导致更多问题。

如果您浏览此论坛,您会发现一些帖子表明对于某些值,“7-8 位精度”的说法是不正确的。如果您的背景知识完全基于十进制,您会想知道是什么击中了您。

指数为零(消除偏差)时,隐式位(设置)和显式位被清除,值将是 1.00000000000000000000000 * 2^0 或 1.0 十进制。如果指数为 1,则值为 1.00000000000000000000000 * 2^1 或 2.0 十进制。

设置尾数的最低位意味着将等于 2^(exponent-23) 的值添加到 1.0 * 2^exponent。 -23 来自于尾数中的最低位是隐式位右侧的 23 个位置,即比定义为 2^exponent 的隐式位小 23 次方。

这应该让您了解如何解决最初的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多