ChatGPTに、ライプニッツ級数で円周率を計算しnumbaの有無を比較するPythonと、比較用にcでのコードを書いてもらった
ChatGPTに、numbaの有り無しでの処理速度を比較するため、ライプニッツ級数で円周率を計算するPythonとcのコードを書いてもらいました。
指示文(プロンプト):
ライプニッツ級数を用いて、円周率を計算するPythonコードを提示してください。和の上限を10^9としてください。numbaを利用する場合と利用しない場合、それぞれ提示してください。
numbaを利用する場合:
import numba
@numba.jit
def pi_leibniz(n):
sum = 0
for i in range(n):
sum += (-1)**i / (2*i + 1)
return sum * 4
print(pi_leibniz(10**9))
numbaを利用しない場合:
def pi_leibniz(n):
sum = 0
for i in range(n):
sum += (-1)**i / (2*i + 1)
return sum * 4
print(pi_leibniz(10**9))
cの場合:
#include
double pi_leibniz(int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += ((i % 2 == 0) ? 1 : -1) / (2.0 * i + 1);
}
return sum * 4;
}
int main() {
printf("%f\n", pi_leibniz(1000000000)); // 10^9
return 0;
}
結果:
以下が計測結果です。コードの違いは「@numba.jit」をつけるか否かですね。計測にはgnu版のtimeを使ってます。cが速いのは自明として、Numbaもなかなか良いです。
numba無し:
real:281.06[sec]
user:281.00[sec]
sys:0.44[sec]
Memory:75996[KB]
numbaあり:
real:14.19[sec]
user:14.09[sec]
sys:0.50[sec]
Memory:121036[KB]
c:の場合
real:2.836[sec]
user:2.831[sec]
sys:0.001[sec]
Memory:1604[KB]