日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一探浮点数

發(fā)布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一探浮点数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

???????浮點數(shù)是一種常用的表示數(shù)的方式,因小數(shù)點可以浮動得名。我們更關(guān)心的是在計算機(jī)中如何表示浮點數(shù)。到目前為止,IEEE754統(tǒng)一了浮點數(shù)的相關(guān)規(guī)范,本文也針對于IEEE754來進(jìn)行分析。

???????在一般的通用計算機(jī)中,通常來講單精度浮點數(shù)(float)使用32個bit來表示,雙精度(double)使用64個bit來表示。因為單雙精度方法類似,只是表達(dá)范圍不同,所以本文以單精度(32bits)為例進(jìn)行探討。

??????? 對于單精度浮點數(shù),32位被分為3部分,分別是符號位(1bit),階碼位(8bits),小數(shù)位(23bits)。對于浮點數(shù),采用科學(xué)計數(shù)法的方式來進(jìn)行數(shù)值上的表示。科學(xué)計數(shù)法也正好對應(yīng)以上三部分。數(shù)值的正負(fù)又符號位體現(xiàn),正數(shù)為0,負(fù)數(shù)為1。根據(jù)基數(shù)的不同,分為2,8,16進(jìn)制等等,但映射到計算機(jī)中都是二進(jìn)制。對于規(guī)格化浮點數(shù)來講默認(rèn)小數(shù)點前面的數(shù)字都是1,于是可以節(jié)省此bit位,不對此進(jìn)行表示。小數(shù)部分對應(yīng)三大部分中的小數(shù)位,直接按照小數(shù)點后的順序?qū)?yīng)即可。需要注意的就是不夠23位的后面補0。

??????? 重點是在階碼位,也是本文的主要講述對象。首先階碼的選擇是移碼而不是補碼。移碼就是設(shè)置偏移量的原碼,從數(shù)值上來看也是符號位取反的補碼,移碼減去1作為階碼。為什么選擇移碼而不是補碼呢?因為浮點數(shù)中涉及到很多比較的操作,也叫做“對階”(我理解為兩個浮點數(shù)比大小,第一個比的是整體數(shù)值的符號,其次就是階的大小),而補碼進(jìn)行比較,需要先轉(zhuǎn)換成原碼非常麻煩。所以在這一點上移碼具有強大的優(yōu)勢。(當(dāng)然了,可能還有其他的原因,歡迎各位讀者補充)。

??????? 為什么移碼比較時具有優(yōu)勢呢?可以簡單理解成使用移碼在比較時都是正數(shù),從原碼變成移碼的過程中加上了一個偏置常數(shù)(bias)。偏置常數(shù)的作用就是修改浮點數(shù)的規(guī)格化數(shù)階數(shù)的表示范圍。以IEEE754為例,有8位無符號數(shù)來表示階數(shù)大小。因為特殊的規(guī)定,取消全是1的最大數(shù)和全是0的最小數(shù),原因是保留全是1和全是0作為非規(guī)格化使用。所以表示范圍是(1至254),共計254個數(shù)字。為了表示正負(fù)范圍相同,偏置常數(shù)為254/2=127。在原來的左右兩側(cè)范圍減去127后,表示的范圍就變成(-126~127),以上這是屬于表示階段。當(dāng)進(jìn)行真正比較的時候,又重新加上偏置常數(shù),變成正數(shù),利于比較。所以一定要記住減去偏置常數(shù)后再用二進(jìn)制做表示。
Bias的計算公式如下:

????在之前的學(xué)習(xí)過程中,老師留下一個疑問,為什么浮點數(shù)表示不精確,具體內(nèi)容可見博客:link

????浮點數(shù)階碼為什么用移碼表示,具體可見博客:link

????對浮點數(shù)介紹很詳細(xì)(雖然目前沒看懂的):link


2021年3.17更
??之前寫這篇的時候還是在學(xué)計算機(jī)組成原理的時候,學(xué)了浮點數(shù)的大部分內(nèi)容。但這學(xué)期一門課叫做計算機(jī)系統(tǒng)結(jié)構(gòu)又新學(xué)了一點關(guān)于浮點數(shù)的內(nèi)容,我在此做個補充。
??其實之前一直沒有想過階碼、尾數(shù)的表示都是二進(jìn)制,那用其他進(jìn)制,比如16進(jìn)制表示行不行呢?答案當(dāng)然是:可以!東西的本質(zhì)不變,表示的方法有很多種。
??這里放一張相關(guān)的圖(圖源:計算機(jī)系統(tǒng)結(jié)構(gòu)(第五版)-李學(xué)干)

??對其中相關(guān)的參數(shù)進(jìn)行下說明:
??p:階碼除去符號位后的位數(shù)(階碼整體使用p+1位表示)
??rm:表示的進(jìn)制數(shù)(2,8,16…)
??m:2進(jìn)制下尾數(shù)的位數(shù)
??m’:其他進(jìn)制下尾數(shù)的位數(shù)。

??那使用比2大的進(jìn)制有什么好處壞處呢?

??優(yōu)點:擴(kuò)大浮點數(shù)的表示范圍、增加可表示數(shù)的個數(shù)、減少移位次數(shù)、降低右移造成的精度損失、提高運算速度
??缺點:降低數(shù)據(jù)的表示精度、數(shù)值的分布變稀。

??此處對于其他進(jìn)制的介紹比較簡略,起到一個拋磚引玉的作用(我從來沒想過這個問題),更為詳細(xì)的內(nèi)容請大家參考其他資料。

總結(jié)

以上是生活随笔為你收集整理的一探浮点数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。