深入理解計算機系統5 1 1

2021-10-10 11:45:45 字數 955 閱讀 7141

float_neg

求浮點數的相反數

#include

unsigned

float_neg

(unsigned uf)

return uf;

}int

main()

解釋:這裡求浮點數取負,我們需要知道特殊的值nan(無窮),所以只要排除掉nan的情況我們就可以直接改變符號位來取負。

回想一下nan的特點:階碼字段全為1,而小數字段非零。

uf>>23將小數字段捨去看階碼,((uf>>23)&0xff),用異或 可以知道如果階碼全為1則為0, 反之為1

然後我們再來看小數字段,(1<<23)到小數最高位的左一位,-1得到與小數字段對應的區域。通過與小數字段 與 就能知道是否小數字段非零。

所以如果它是乙個nan則直接return;否則就要進入條件語句。

最後我們改變符號位是的結果取負。

23位到30位為階碼字段,小數字段為0位到23位。

float_twice函式

求乙個浮點數的兩倍

因為浮點數的規格化數的乘法與非規格化數的乘法不是乙個規則,所以我們要條件判斷;

如果階碼字段為0,則為非規格化數,我們需要乘 2 就只能左移補位(注意不要改變符號位,補上符號位)。

如果階碼字段不為0,又 分為規格化數與 nan無窮數。對於nan我們直接return;對於規格化數,我們在階碼字段加1即可。

#include

unsigned

float_twice

(unsigned uf)

return uf;

}int

main()

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...

《深入理解計算機系統》

知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...

深入理解計算機系統

系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...