十進制數轉IEE754單精度浮點數以及浮點數轉換的python實現


十進制數轉IEE754單精度浮點數

理解題目

單精度浮點數:單精度浮點數是用來表示帶有小數部分的實數,一般用於科學計算。占用4個字節(32位)存儲空間,包括符號位1位,階碼8位,尾數23位。其數值范圍為-3.4E38~3.4E38,單精度浮點數最多有7位十進制有效數字,單精度浮點數的指數用“E”或“e”表示。

具體規則及例子

規則參照鏈接https://zhidao.baidu.com/question/457693134.html
較詳細講解了單精度浮點數向十進制的轉化,倒着看即可理解十進制轉浮點數

5.75→01000000101110000000000000000000
161.875→01000011001000011110000000000000
-0.0234375→10111100110000000000000000000000

python語句實現

def ConvertFixedIntegerToComplement(fixedInterger) :#浮點數整數部分轉換成補碼(整數全部為正)
return bin(fixedInterger)[2:]

def ConvertFixedDecimalToComplement(fixedDecimal) :#浮點數小數部分轉換成補碼
fixedpoint = int(fixedDecimal) / (10.0**len(fixedDecimal))
s = ''
while fixedDecimal != 1.0 and len(s) < 23 :
fixedpoint = fixedpoint * 2.0
s += str(fixedpoint)[0]
fixedpoint = fixedpoint if str(fixedpoint)[0] == '0' else fixedpoint - 1.0
return s

def ConvertToExponentMarker(number) : #階碼生成
return bin(number + 127)[2:].zfill(8)

def ConvertToFloat(floatingPoint) :#轉換成IEEE754標准的數
floatingPointString = str(floatingPoint)
if floatingPointString.find('-') != -1 :#判斷符號位
sign = '1'
floatingPointString = floatingPointString[1:]
else :
sign = '0'
l = floatingPointString.split('.')#將整數和小數分離
front = ConvertFixedIntegerToComplement(int(l[0]))#返回整數補碼
rear = ConvertFixedDecimalToComplement(l[1])#返回小數補碼
floatingPointString = front + '.' + rear #整合
relativePos = floatingPointString.find('.') - floatingPointString.find('1')#獲得字符1的開始位置
if relativePos > 0 :#若小數點在第一個1之后
exponet = ConvertToExponentMarker(relativePos-1)#獲得階碼
mantissa = floatingPointString[floatingPointString.find('1')+1 : floatingPointString.find('.')] + floatingPointString[floatingPointString.find('.') + 1 :] # 獲得尾數
else :
exponet = ConvertToExponentMarker(relativePos)#獲得階碼
mantissa = floatingPointString[floatingPointString.find('1') + 1: ] # 獲得尾數
mantissa = mantissa[:23] + '0' * (23 - len(mantissa))
floatingPointString = '0b' + sign + exponet + mantissa
print(floatingPointString)
return hex( int( floatingPointString , 2 ) )

print(ConvertToFloat(-5.56))
或有代碼如https://www.cnblogs.com/saberwc/p/13833545.html


免責聲明!

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



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