2012-04-17 55 views
2

在我CS計算機體系結構的作業中,我遇到了這個有趣的問題。我的教授希望我們找到一個單精度和一個雙精度數字,這樣當你給它們中的任何一個加1時,數字根本不會改變。爲什麼這是有道理的,我怎麼才能找到這些數字?在MIPS中將1添加到浮點數不會更改數字嗎?

謝謝!

+0

什麼是浮點格式?你必須知道如何在內存中表示浮點數,以及這些部分是什麼意思。然後很容易找到這樣的數字。 – 2012-04-17 14:50:59

+1

閱讀[每位計算機科學家應瞭解的浮點算術知識](http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html)。 – jwodder 2012-04-17 14:52:31

回答

1

請記住,浮點數的精度有限(它們可以跟蹤的有效位數)。對於大約7位數的單精度浮點數,對於大約16位數的雙精度。

還要記住,浮動數字的範圍可以超過3 x 10^38 - 所以顯然不是所有的數字都是重要的。

+0

我知道,對於單精度,有1個符號位,後面是8個指數位,然後是22個分數位。但是,我怎樣才能找到這個數字呢? – roboguy12 2012-04-17 15:11:52

+0

@ roboguy12:我認爲你不一定需要關注那個細節。想一想,當你處理數十億的數字時,只有3位有效數字,你可以增加1到234,000,000,000。如果只保留3位有效數字會發生什麼? – 2012-04-17 15:20:33

+0

哦,這很有道理!謝謝你現在的工作 – roboguy12 2012-04-17 15:30:54

0

浮點數學基於二進制(基數2)數字系統。這裏的許多答案將說明十進制系統(基數10)上下文中的精度和值。這會導致(例如)不同浮點格式的最小值和最大值出現奇怪的值。

單精度尾數中的24位(1隱含+23位顯式)位轉換爲24位二進制數字的精度。其中最高位設置的最低24位數是2^23,即轉換爲800000十六進制或8388608小數(七位有效小數位)。最高位設置的最高位數是2^24-1,即轉換爲ffffff十六進制或16777215(八位有效小數位)。所以現在你知道提到的「7-8位精度」來自哪裏。就我個人而言,我認爲二進制解釋清楚地解釋了事情,而小數點通常導致更多問題。

如果您瀏覽此論壇,您會發現文章顯示某些值的「7-8位精度」語句不正確。如果你的背景知識完全基於十進制,你會想知道是什麼打擊你。

指數爲零(去除偏移量),隱式位(set)和清除該位的顯式位將爲1.00000000000000000000000 * 2^0或1.0小數。如果指數是1,則該值將是1.00000000000000000000000 * 2^1或2.0小數。

設置尾數中的最低位表示向1.0 * 2 ^指數添加等於2 ^(指數-23)的值。 -23來自這樣一個事實,即尾數中的最低位是隱式位右邊的23個位置,其中兩個23的冪小於被定義爲2 ^指數的隱式位。

這應該給你一個關於如何解決原始問題的暗示。