【发布时间】:2012-03-04 04:56:00
【问题描述】:
我对 libc 的“sin”函数有疑问。
#include <cmath>
#include <stdio.h>
int main(int argc, char **argv)
{
double tt = 6.28318530717958620000; // 2 * M_PI
double yy = ::sin(tt);
printf("%.32f\n", yy);
return 0;
}
在没有任何优化选项的情况下使用“g++”编译上述代码时,它会输出“-0.00000000000000024492127076447545”。 但是如果使用“-O3”选项,它将输出“-0.00000000000000024492935982947064”。
为什么不返回“-0.00000000000000024492935982947064”而不返回“-O3”? 提前致谢。
【问题讨论】:
-
我可以知道您使用的是哪个版本的 g++ 以及哪个操作系统和硬件吗?
-
g++ 4.4.3、ubuntu 10.04 和 Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz。谢谢。
-
也许可以查看
-ffast-math选项。 -
-Ofast在这里也值得一提。 -
-ffast-math 对结果没有影响。 -Ofast 不是 g++ 的有效选项参数。