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

2019-05-08 10:20:55 +08:00
 wk0831
我将收到的 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)
1016 次点击
所在节点    程序员
1 条回复
sunocean
2019-05-08 16:00:56 +08:00
double 这个类型本来就是不精准存储的。
python 里 double 类型有效位是 7 位。只要前七位一致。那么就是正常的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/562084

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX