请考虑以下代码:
#include <cmath>
#include <cstdio>
const int COUNT = 100000000;
int main()
{
double sum = 0;
for (int i = 1; i <= COUNT; ++i)
sum += sqrt(i);
printf("%f\n", sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它在我的电脑上运行5.5秒.但是,如果我改变sqrt成std::sqrt,它将仅0.7秒运行.
我知道,如果我使用sqrt,我正在使用C库中的函数,如果我使用std::sqrt,我正在使用它<cmath>.
但<cmath>没有定义一个int,如果我改变的类型i进入double,他们会为相同的速度运行.所以编译器没有优化int.这似乎只发生sqrt在Windows中.
那么为什么std::sqrt比sqrt其他功能快得多?为什么在Linux中他们不是?