浮點數計算


浮點數

單精度浮點數共 32 位 = 1符號位[31] + 8指數位[23-30] + 23有效數字位[0-22]

雙精度浮點數共 64 位 = 1符號位[63] + 11指數位[52-62] + 52有效數字位[0-51]

指數偏移量(exponent bias),因為浮點數的指數是無符號數,而且指數有正有負,為了使指數能表示正數和負數設置了指數偏移量,小於指數偏移量的為負,反之為正。

指數偏移量 = 2^(指數位-1)-1。

單精度浮點數的指數偏移量為127(0111 1111)

雙精度浮點數的指數偏移量為1023(011 1111 1111)

將十進制小數轉換成浮點數

  1. 將十進制小數轉換成二進制

1.1 轉換整數部分(除2)
整數部分除2保留余數,結果繼續除2直到結果為0,將所得的余數從后往前依次拼接起來就是二進制數。
6 / 2 = 3 余 0
3 / 2 = 1 余 1
1 / 2 = 0 余 1
∴ 6 => 110
1.2 轉換小數部分(乘2)
小數部分乘2保留結果的整數部分,結果的小數部分繼續乘2直到結果的小數部分為0,將所得的整數部分從前往后依次拼接。
0.8125 * 2 = 1.625 整數 1 小數 0.625
0.625 * 2 = 1.25 整數 1 小數 0.25
0.25 * 2 = 0.5 整數 0 小數 0.5
0.5 * 2 = 1.0 整數 1 小數 0
∴ 0.8125 => 0.1101

  1. 確定符號位、指數位和有效數字位

2.1 符號位 1 表示負數,0 表示正數
2.2 將二進制小數保留一位整數,小數點左移n位,指數為+n,小數點右移n位,指數為-n,指數位為偏移量+指數
2.3 保留一位整數之后的小數部分就是尾數(二進制數因為保留一位整數之后,整數部分始終為1)。有效數字位為尾數后面補零

  1. 得出結果

將符號位、指數位(偏移量+指數)、有效數字位依次拼接起來就是

例如:-12.75 轉換成單精度浮點數

  1. 將十進制小數轉換成二進制:-1100.11

1.1 轉換整數部分(除2):-1100
1.2 轉換小數部分(乘2):0.11

  1. 確定符號位、指數位和有效數字位:-1.10011

2.1 符號位:1
2.2 指數位:127 + 3 = 128 + 2 = 1000 0000 + 10 = 1000 0010
2.3 有效數字位:100 1100 0000 0000 0000 0000

  1. 得出結果:1 1000 0010 100 1100 0000 0000 0000 0000

將浮點數轉換成十進制小數

  1. 先確定符號位、指數位、有效數字位

先根據浮點數位數 確定是單精度還是雙精度,然后確定符號位、指數位、有效數字位

  1. 確定符號、指數和小數

符號位為1則為負數,反之為正數
指數 = 指數位 - 偏移量
小數 = 有效數字位去掉右端的0

  1. 得出結果

小數部分 + 1得到尾數
指數為+n則小數點右移n位反之左移n位得到二進制小數。
將二進制小數轉換成十進制小數


免責聲明!

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



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