V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wk0831
V2EX  ›  程序员

关于二进制字符串转成 double 十进制的问题,按照公式为什么总差一点,数量级是对的,求助大佬!

  •  
  •   wk0831 · 2019-05-08 10:20:55 +08:00 · 1051 次点击
    这是一个创建于 2017 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我将收到的 64 位二进制字符串先八位颠倒重排,因为是小端存储。按照 求值方法:(-1)^S*(1.M)*2^(E-1023) 解出最后的值,但是和用网上一些线上转换工具出来的就差一些,数量级是一致的,附代码如下(我是 python 新手,代码很不美观)谢谢大佬们帮忙看看。

    dat_sort = dat[56:64]+dat[48:56]+dat[40:48]+dat[32:40]+dat[24:32]+dat[16:24]+dat[8:16]+dat[0:8]
    factor = len('%d'% int(dat_sort[12:64],2))
    factor = pow(10,factor)
    M = int(dat_sort[12:64],2)/factor
    S = pow(-1,int(dat_sort[0],2))
    E = int(dat_sort[1:12],2)

    num = S*(1+M)*pow(2,E-1023)
    1 条回复    2019-05-08 16:00:56 +08:00
    sunocean
        1
    sunocean  
       2019-05-08 16:00:56 +08:00 via iPhone
    double 这个类型本来就是不精准存储的。
    python 里 double 类型有效位是 7 位。只要前七位一致。那么就是正常的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3540 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:55 · PVG 12:55 · LAX 20:55 · JFK 23:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.