FPU與浮點(diǎn)數(shù)
FPU:(Float Point Unit,浮點(diǎn)運(yùn)算單元)FPU是專用于浮點(diǎn)運(yùn)算的處理器,以前的FPU是一種單獨(dú)芯片,在486之后,英特爾把FPU集成在CPU之內(nèi)。
浮點(diǎn)運(yùn)算器(英文:floating point unit,簡稱FPU)是計(jì)算機(jī)系統(tǒng)的一部分,它是專門用來進(jìn)行浮點(diǎn)數(shù)運(yùn)算的。典型的運(yùn)算有加減乘除和開方。一些系統(tǒng)(尤其是比較老的,基于微代碼體系的)還可以計(jì)算超越函數(shù),例如指數(shù)函數(shù)或者三角函數(shù),盡管對大多數(shù)現(xiàn)在的處理器,這些功能都由軟件的函數(shù)庫完成。在大多數(shù)現(xiàn)在的通用計(jì)算機(jī)架構(gòu)中,一個(gè)或多個(gè)浮點(diǎn)運(yùn)算器會(huì)被集成在CPU(Central Processing Unit,中央處理器)中,但許多嵌入式處理器(特別是比較老的)沒有在硬件上支持浮點(diǎn)數(shù)運(yùn)算。在過去,一些系統(tǒng)通過協(xié)同處理器而不在同一個(gè)處理器中來處理浮點(diǎn)數(shù)。在微型計(jì)算機(jī)時(shí)代,這一般只用一個(gè)芯片;而在以前,可能要用一整個(gè)電路板甚至一臺(tái)機(jī)箱。不是所有的計(jì)算機(jī)架構(gòu)中都有硬件的浮點(diǎn)運(yùn)算器。在沒有硬件浮點(diǎn)運(yùn)算器的情況下,許多浮點(diǎn)數(shù)的運(yùn)算也可以像有硬件那樣做到。這樣可以節(jié)省浮點(diǎn)運(yùn)算器的硬件成本,但這樣會(huì)使計(jì)算變得慢得多。仿硬件浮點(diǎn)運(yùn)算可以通過多種層次的方法實(shí)現(xiàn)——在CPU中用微代碼處理,用操作系統(tǒng)的函數(shù)處理,用用戶自己的代碼處理。在大多數(shù)現(xiàn)代計(jì)算機(jī)的架構(gòu)中,一些浮點(diǎn)數(shù)運(yùn)算跟整數(shù)運(yùn)算是分開的。這些分別在不同的架構(gòu)上差別很大。有一些架構(gòu),例如英特爾(Intel)的x86處理器設(shè)計(jì)了浮點(diǎn)數(shù)寄存器,另一些架構(gòu)中,處理浮點(diǎn)數(shù)甚至有獨(dú)立的時(shí)頻時(shí)域。當(dāng)CPU執(zhí)行一個(gè)需要浮點(diǎn)數(shù)運(yùn)算的程序時(shí),有三種方式可以執(zhí)行:軟件仿真器(浮點(diǎn)運(yùn)算函數(shù)庫)、附加浮點(diǎn)運(yùn)算器和集成浮點(diǎn)運(yùn)算器。多數(shù)現(xiàn)在的計(jì)算機(jī)有集成的浮點(diǎn)運(yùn)算器硬件。
浮點(diǎn)數(shù)運(yùn)算常常是用特別的總線傳輸?shù)摹T谠缙诘臎]有中斷機(jī)制的大尺度架構(gòu)(的處理器)中,浮點(diǎn)運(yùn)算有時(shí)與整數(shù)運(yùn)算獨(dú)立傳輸。今時(shí)今日,許多CPU或架構(gòu)都有超過一個(gè)浮點(diǎn)運(yùn)算器,例如PowerPC 970 和基于Netburst和AMD64架構(gòu)的處理器(分別例如奔騰(Pentium)4和速龍(Athlon)64)
浮點(diǎn)數(shù)運(yùn)算常常是用特別的總線傳輸?shù)?。在早期的沒有中斷機(jī)制的大尺度架構(gòu)(的處理器)中,浮點(diǎn)運(yùn)算有時(shí)與整數(shù)運(yùn)算獨(dú)立傳輸。今時(shí)今日,許多CPU或架構(gòu)都有超過一個(gè)浮點(diǎn)運(yùn)算器,例如PowerPC 970 和基于Netburst和AMD64架構(gòu)的處理器(分別例如奔騰(Pentium)4和速龍(Athlon)64)
浮點(diǎn)加法減法運(yùn)算設(shè)有兩個(gè)浮點(diǎn)數(shù)x和y,它們分別為x = Mx*2^Exy =
My*2^Ey其中Ex和Ey分別為數(shù)x和y的階碼,Mx和My為數(shù)x和y的尾數(shù)。兩浮點(diǎn)數(shù)進(jìn)行加法和減法的運(yùn)算規(guī)則是設(shè) Ex小于等于Ey,則 x±y =
(Mx*2^(Ex-Ey)±My)*2^Ey,完成浮點(diǎn)加減運(yùn)算的操作過程大體分為四步:1. 0 操作數(shù)的檢查;2. 比較階碼大小并完成對階;3.
尾數(shù)進(jìn)行加或減運(yùn)算;4. 結(jié)果規(guī)格化并進(jìn)行舍入處理。⑴ 0
操作數(shù)檢查浮點(diǎn)加減運(yùn)算過程比定點(diǎn)運(yùn)算過程復(fù)雜。如果判知兩個(gè)操作數(shù)x或y中有一個(gè)數(shù)為0,即可得知運(yùn)算結(jié)果而沒有必要再進(jìn)行后續(xù)的一系列操作以節(jié)省運(yùn)算時(shí)間。0操作數(shù)檢查步驟則用來完成這一功能。⑵
比較階碼大小并完成對階兩浮點(diǎn)數(shù)進(jìn)行加減,首先要看兩數(shù)的階碼是否相同,即小數(shù)點(diǎn)位置是否對齊。若二數(shù)階碼相同,表示小數(shù)點(diǎn)是對齊的,就可以進(jìn)行尾數(shù)的加減運(yùn)算。反之,若二數(shù)階碼不同,表示小數(shù)點(diǎn)位置沒有對齊,此時(shí)必須使二數(shù)階碼相同,這個(gè)過程叫作對階。要對階,首先應(yīng)求出兩數(shù)階碼Ex和Ey之差,即△E
= Ex-Ey若△E=0,表示兩數(shù)階碼相等,即Ex=Ey;若△E>0,表示Ex>Ey;若△E<0,表示Ex