python中浮点型和十进制_十进制数转IEE754单精度浮点数以及浮点数转换的python实现...

十进制数转IEE754单精度浮点数

理解题目

单精度浮点数:单精度浮点数是用来表示带有小数部分的实数,一般用于科学计算。占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为-3.4E38~3.4E38,单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用“E”或“e”表示。

具体规则及例子

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 ) )

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值