Gcc g++;双精度arm vs intel
以下是一幅图像,显示了同一程序在intel和ARM中的输出: 两者都显示读取二进制文件的输出,第一列中的数字为双精度浮点格式。为什么我无法在ARM环境中获得正确的结果(如intel--41784.998495、41784.998623)vs(-8.1974E+204f等) 我使用的arm处理器是: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
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]()更多的双字交换。可能的重复