2

以下程序在 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 问题有关。

4

0 回答 0