我正在运行这两个代码。它们都执行相同的数学过程(计算数列值直至大项),并且,正如预期的那样,产生相同的输出。你知道吗
但由于某些原因,PyPy代码的运行速度明显快于C代码。你知道吗
我不明白为什么会发生这种情况,因为我希望C代码运行得更快。你知道吗
如果有人能帮我澄清这一点,我会很感激的(也许有更好的方法来编写C代码?)你知道吗
C代码:
#include <stdio.h>
#include <math.h>
int main()
{
double Sum = 0.0;
long n;
for(n = 2; n < 1000000000; n = n + 1) {
double Sign;
Sign = pow(-1.0, n % 2);
double N;
N = (double) n;
double Sqrt;
Sqrt = sqrt(N);
double InvSqrt;
InvSqrt = 1.0 / Sqrt;
double Ln;
Ln = log(N);
double LnSq;
LnSq = pow(Ln, 2.0);
double Term;
Term = Sign * InvSqrt * LnSq;
Sum = Sum + Term;
}
double Coeff;
Coeff = Sum / 2.0;
printf("%0.14f \n", Coeff);
return 0;
}
pypypy代码(更快的Python实现):
from math import log, sqrt
Sum = 0
for n in range(2, 1000000000):
Sum += ((-1)**(n % 2) * (log(n))**2) / sqrt(n)
print(Sum / 2)
除了编译器的优化级别之外,您还可以改进代码:
现在我们可以进一步简化代码:
这一点也不奇怪,
PyPy
默认情况下会执行大量的运行时优化,而默认情况下,C
编译器不会执行任何优化。戴夫·比兹利的2012 PyCon Keynote非常明确地阐述了这一点,并对为什么会发生这种情况提供了深刻的解释。你知道吗根据引用的谈话,
C
在使用optimization level2
或3
编译时应超过PyPy
(您可以在cpython
、pypy
和C
开始here中观看fibonacci生成性能的完整部分)。你知道吗相关问题 更多 >
编程相关推荐