在AIX 6.1上使用GCC 4.4进行的长双精度计算不正确

时间:2013-02-26 13:59:09

标签: gcc aix

以下程序在AIX 6.1下使用GCC 4.4编译时会生成错误的输出,具体取决于优化选项

#include <cmath>
#include <stdio.h>

int main()
{
    const long double a = 2.0L;

    long double x = ::powl( a, a );
    printf( "  ::powl(2,2)=%Lf\n", x );

    long double y = std::pow( a, a );
    printf( "std::pow(2,2)=%Lf\n", y );

    return 0;
}

编译时没有优化,输出错误:

  ::powl(2,2)=1.000000
std::pow(2,2)=1.000000

使用-O或-mlong-double-64输出正确

  ::powl(2,2)=4.000000
std::pow(2,2)=4.000000

GCC 4.6和GCC 4.7中不存在这个问题,但是,我不能转向更新的GCC版本。一个等效的C程序也可以正常使用和不使用优化,所以我认为libstdc ++有问题。

任何人都可以确认这个问题吗?这可能与GCC problem with raw double type comparisons有关。

0 个答案:

没有答案