Gcc g++;双精度arm vs intel

Gcc g++;双精度arm vs intel,gcc,g++,arm,cross-compiling,double-precision,Gcc,G++,Arm,Cross Compiling,Double Precision,以下是一幅图像,显示了同一程序在intel和ARM中的输出: 两者都显示读取二进制文件的输出,第一列中的数字为双精度浮点格式。为什么我无法在ARM环境中获得正确的结果(如intel--41784.998495、41784.998623)vs(-8.1974E+204f等) 我使用的arm处理器是: Processor : ARM926EJ-Sid(wb) rev 0 (v5l) BogoMIPS : 331.77 Features : swp hal

以下是一幅图像,显示了同一程序在intel和ARM中的输出:

两者都显示读取二进制文件的输出,第一列中的数字为双精度浮点格式。为什么我无法在ARM环境中获得正确的结果(如intel--41784.998495、41784.998623)vs(-8.1974E+204f等)

我使用的arm处理器是:

Processor       : ARM926EJ-Sid(wb) rev 0 (v5l)

BogoMIPS        : 331.77

Features        : swp half thumb fastmult edsp java

CPU implementer : 0x41

CPU architecture: 5TEJ

CPU variant     : 0x0

CPU part        : 0x926

CPU revision    : 0

Cache type      : write-back

Cache clean     : cp15 c7 ops

Cache lockdown  : format C

Cache format    : Harvard
I size          : 32768
I assoc         : 1
I line length   : 32
I sets          : 1024
D size          : 32768
D assoc         : 1
D line length   : 32
D sets          : 1024

Hardware        : MV-88fxx81
Revision        : 0000
Serial          : 0000000000000000
ARM上的我的编译选项:
g++-Wall SC_SCID.cpp


如何在此处理器上正确读取双精度类型?我是否需要启用任何编译器选项来正确处理ARM上的双精度数字

像41784.998495和-8.1974E+204这样的数字之间的差异很可能是字节排序问题——英特尔处理器是小端,而ARMs是大端。因此,如果您在其中一个上写入二进制文件,并希望在另一个上读取它,则需要对值进行字节交换。

NB:这是一个wiki答案;任何人都可以编辑。

根据,double的ARM-softfp仿真使用了big和little-endian的混合。对于整数类型,ARM926EJ的本机格式肯定是小尾端


阅读更多问题

“手臂是大端的”——嗯?ARM CPU是双端的,但默认情况下是LE的-没有多少系统在BE模式下运行它们(虽然我不是说这不是其中之一)。谢谢你们两位的投入。解决方案确实是重新排列字节顺序<代码>双交换(双d){/code>
双a;
无符号字符*dst=(无符号字符*)&a;
无符号字符*src=(无符号字符*)&d;
dst[0]=src[4];
dst[1]=src[5];
dst[2]=src[6];
dst[3]=src][7] 
dst[4]=src[0];
dst[5]=src[1];
dst[6]=src[2];
dst[7]=src[3];
`返回一个;`
}
[link]()更多的双字交换。可能的重复