Time 卫星数据处理误差

Time 卫星数据处理误差,time,hex,double,word,satellite,Time,Hex,Double,Word,Satellite,一个新的卫星数据处理中心刚刚建成,并准备使用轨道卫星发送的实时数据进行初步测试。当第一条消息显示在屏幕上时,您会注意到许多数据值超出范围。 例如,终端屏幕上定义为“增量时间”,似乎超出了预期范围[0.01到10000.00秒],但显示的值(双精度)为[-4.12318024e-028秒]。在进一步调查基于原始字节的数据流后,您会发现从卫星发送的该双字的原始数据为[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]。在其中一个旧终端上,该数据显示正确且在预期范围内 a

一个新的卫星数据处理中心刚刚建成,并准备使用轨道卫星发送的实时数据进行初步测试。当第一条消息显示在屏幕上时,您会注意到许多数据值超出范围。
例如,终端屏幕上定义为“增量时间”,似乎超出了预期范围[0.01到10000.00秒],但显示的值(双精度)为[-4.12318024e-028秒]。在进一步调查基于原始字节的数据流后,您会发现从卫星发送的该双字的原始数据为[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]。在其中一个旧终端上,该数据显示正确且在预期范围内

a. [5]  What caused this problem?
b. [5]  If this is the real problem, what should the actual value be?

啊,失效模式分析。真的很重要

嗯,其他终端正确显示数据-->终端和数据之间存在不兼容

大恩迪安,也许是小恩迪安?我希望“旧”终端是little Endian,因为它可能是用C编写的。现在您可以解释数据了

这里有一些代码

#include  <stdio.h>

union myW {
    double x;
    // Recieved as:[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]
    unsigned char d[8] = {0x83, 0xC0,0xCA, 0xA1, 0x55, 0x66, 0xBA, 0x40};   
};

union myBad {
    double x;
    // Recieved as:[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]
    unsigned char d[8] = {0xC0, 0x83,0xA1, 0xCA, 0x66, 0x55, 0x40, 0xBA};   
};


int  main(void)
{
    myW value;
    value.x = 1.0;  // check how reasonable number looks like

    printf("Something reasonable: \n");
    for(int i = 0; i < 8; i++)
    {
        printf("%u ", value.d[i]);
    }   

    myW received;
    printf("\nWhat shouldve been displayed:\n");
    for(int i = 0; i < 8; i++)
    {
        printf("%u ", received.d[i]);
    }
    printf("\n%f\n", received.x);

    myBad bad;
    printf("\nBad output as:\n");
    for(int i = 0; i < 8; i++)
    {
        printf("%u ", bad.d[i]);
    }
    printf("\n%0.30f\n", bad.x);
 }

用g++

编译时,我尝试了反向字节+反向位+异或0x80,结果是
2.39
。。。但是你不认为,既然这是一个问题,结果可能会更“全面”,比如
20.0
,或者是一些引人注目的东西,比如
3.14159
…你为什么期望这样?因为这是一个“学术”问题?它在预期范围内![0.01至10000.00秒]
Something reasonable: 
0 0 0 0 0 0 240 63 
What shouldve been displayed::
131 192 202 161 85 102 186 64 
6758.334500

Bad output as:
192 131 161 202 102 85 64 186 
-0.000000000000000000000000000412