![](/img/trans.png)
[英]Convert the internal representation of a float stored in an integer to an actual float
[英]Integer representation to float representation
是否有一種算法可以僅使用整數運算就可以將其整數表示形式的32位整數轉換為IEEE 754浮點表示形式?
我對此有一些想法,但到目前為止這些工作都沒有。 (使用C)
我當時正在考慮對整數進行移位,但是后來我未能在其上構造新的float表示形式。
我想我可以將整數轉換為二進制,但是第一種方法存在相同的問題。
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.