gcc 2.95浮点线性代数不匹配gcc 4.3.2

时间:2012-07-10 20:18:38

标签: linear-algebra floating-point-precision

我正在编译使用线性代数计算色谱的遗留代码。矩阵使用float作为类型,所有计算都使用float。当我们使用旧的编译器(turbo-linux gcc 2.95)时,我们得到一个答案。当我使用我们的新编译器(SuSE gcc 4.3.2)时,我们得到不同的光谱。

我需要获取使用新编译器编译的相同程序的输出,以使用旧编译器匹配输出。

我尝试过使用这些编译器选项:  g ++ -g -lstdc ++ -mfpmath = no-sse -mno-sse -mno-sse2 -ffloat-store -mieee-fp

和这段代码:

volatile unsigned short int cw;
__asm__ volatile("fstcw %0" : "=m" (*&cw));
printf("floating point control word was: %x\n",cw);
cw=0x027f;
__asm__ volatile("fldcw %0" :: "m" (*&cw));
    printf("floating point control word  now is: %x\n",cw);

这些都不能使色谱匹配。

那么问题是......是否有一个银色的子弹来制作由两个不同编译器编译的代码匹配的色谱?我希望浮点控制宽度(上面的flpcw)是解决方案,但事实并非如此。 (注意,代码太复杂而无法发布)。

P.S。上面代码的结果是: gcc 2.95浮点控制字是:0x37f          浮点控制字现在是0x27f。

gcc 4.3.2浮点控制字为:0x37f           浮点控制字现在是0x27f。

0 个答案:

没有答案