簡體   English   中英

整數表示法到浮點表示法

[英]Integer representation to float representation

是否有一種算法可以僅使用整數運算就可以將其整數表示形式的32位整數轉換為IEEE 754浮點表示形式?


我對此有一些想法,但到目前為止這些工作都沒有。 (使用C)

  1. 我當時正在考慮對整數進行移位,但是后來我未能在其上構造新的float表示形式。

  2. 我想我可以將整數轉換為二進制,但是第一種方法存在相同的問題。

優秀的浮動資源

Address   +3        +2      +1      +0
Format SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM

S表示符號位,其中1為負,0為正。

E是二進制補碼指數,偏移量為127。

M是23位歸一化尾數。 最高位始終為1,因此不存儲

然后在這里尋找二進制補碼


我將num用作位數組,我知道這不是標准的C數組范圍訪問,但是您明白了
因此,對於基本算法,我們從填寫S開始。

bit S = 0;
if (num[0] ==1) {
  S = 1;
  num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1
}

現在我們設置了S,其余的數字都有一個標量值。

然后,我們可以通過找到第一個索引1來將數字放置在尾數中。這也將使我們找到指數。 請注意,由於我們不能有整數整數值,因此指數將始終為正。 (另外,在特殊情況下先檢查該值是否為0,以避免在此處出現無限循環,或者只是適當地修改循環,我很懶惰)

int pos = 1;
signed byte E = 32;
bit[23] M;
while(num[pos] == 0) {
  --E;
  ++pos;
}
int finalPos = min(32, pos+23); //don't get too many bits
M = num[pos+1..finalPos]; //set the mantissa bits

然后用S,E,M中的位構造浮點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM