zoukankan      html  css  js  c++  java
  • 十进制数转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

  • 相关阅读:
    Blend3中创建的Silverlight程序在设计模式下无法显示图片的解决办法
    创建Silverlight Bussiness Application时报错的解决
    .NET 2.0 字符串比较
    ASP.NET 客户端缓存
    AjaxPro部署成功
    遭遇反序列化异常:"在分析完成之前就遇到流结尾"
    正则表达式
    哈哈,终于申请获得批准了!
    ClientScript.RegisterClientScriptInclude注册脚本
    今天经过一场深有体会的谈话终于决定了我2012的方向
  • 原文地址:https://www.cnblogs.com/kenneth2012/p/13834270.html
Copyright © 2011-2022 走看看