IEEE754标准计算公式问题

「已注销」 2013-08-08 09:14:56
我现在在开发一个项目,其中有一个要获取艾默生UPS电压电流等数据。
根据厂家提供的协议返回的数据,怎么计算都不对,可能是我算的有误。例如‘交流输出电流A’,我在现场看机器数据为219.9V,返回的16进制内容其中的一段对应的‘交流输出电流A’是36 36 45 36 35 42 34 33(数据较长,但是根据文档中说明该UPS浮点数据都根据IEEE754标准,此段数据应该是正确的,也就是说此段16进制数对应的浮点数据为219.9)。但是我自己计算时数据却差太多了,不知道是我计算错误还是返回数据有问题(应该是我的问题),有懂的大神们给解答下,谢谢。
附:IEEE754标准公式
16进制转换10进制浮点工具计算结果:
我的计算过程:
36 36 45 36 35 42 34 33
6 6 E 6 5 B 4 3
110 110 1110 110 101 1011 100 11
0110 0110 1110 0110 0101 1011 0100 0011
符号位(S)=0
阶码(E) =110 0110 1
尾数(M) =110 0110 0101 1011 0100 0011
符号位(S)=0
阶码(E) =205
尾数(M) =6708035
套用浮点数值公式:±(1+M*2的负23次方)*2的(E-127)次方
±(1+6708035*0.00000011920928955078125)*2的78次方
±(1+0.79966008663177490234375)*302231454903657293676544
±(1.79966008663177490234375)*302231454903657293676544
=±543913886314763254759424
=±5.4
备注:2的-1次方 = 1除以2的1次方

我的结果等于+5.4,工具计算结果=+2.7,机器上显示+219.9= =我表示很无奈。。求大神们解答。多谢
我使用C#程序开发的,C++不会= =
...全文
1219 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2013-08-12
  • 打赏
  • 举报
回复
引用 2 楼 My_Love 的回复:
36 36 45 36 35 42 34 33 => 66 E6 5B 43 => 435BE666 => 01000011010110111110011001100110 => 0 10000110 10110111110011001100110 => + 134 0.7179687 => (1+0.7179687)*2^(134-127) => 219.9
多谢了。你说的完全正确。我之前不太理解高低字节传送顺序。现在明白了。多谢
My_Love 2013-08-09
  • 打赏
  • 举报
回复
36 36 45 36 35 42 34 33 => 66 E6 5B 43 => 435BE666 => 01000011010110111110011001100110 => 0 10000110 10110111110011001100110 => + 134 0.7179687 => (1+0.7179687)*2^(134-127) => 219.9
My_Love 2013-08-09
  • 打赏
  • 举报
回复
你对标准理解有误,测试下:
static char Buf[16];
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    union
    {
        float X;
        unsigned char XX[4];
    };

    X = 219.9;

    BinToHex(XX, Buf, 4);

    Caption = Buf;
}

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧