浮點數的表示范圍計算


對於C語言來說,其浮點數類型是以下兩種表示:

類型 占用存儲空間 表述范圍
float 4字節 -3.403E38~3.403E38
double 8字節 -1.798E308~1.798E308

其浮點數各自表述范圍的計算,看一下各個位的定義就行。32位的浮點數是1位符號位+8位指數位+23位底數位

最大最小值的話對應都是絕對值最大的情況。8位指數位里255被保留,最大只能取到254,移碼的偏移量是+127,也就是說254表示的是2127。23位底數位全是1的話,是二進制的1.111…111(小數點后23個1),也就是“1后面24個0”減去1再右移23位。

那么這個最大的絕對值對應的就是((((1 << 24) - 1) << 127) >> 23) = ((1 << 24) - 1) << 104

In[1]:= (224 - 1) x 2104

out[1]:= 3.40282 x 1038 

 

同理:64位的浮點數是1位符號位+11位指數位+52位底數位,11位指數位里2047被保留,最大只能取到2046,移碼的偏移量是+1023,也就是說2046表示的是21023。52位底數位全是1的話,是二進制的1.111…111(小數點后52個1),也就是“1后面53個0”減去1再右移52位。

那么這個最大的絕對值對應的就是((((1 << 53) -1) << 1023) >> 52) = ((1 << 53) - 1) << 971

In[1]:= (253 - 1) x 2971

out[1]:= 1.79769 x 10308

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM