ChatGPTに、ライプニッツ級数で円周率を計算しnumbaの有無を比較するPythonと、比較用にcでのコードを書いてもらった

ChatGPTに、numbaの有り無しでの処理速度を比較するため、ライプニッツ級数で円周率を計算するPythonとcのコードを書いてもらいました。

\sum_{n=0}^{\infty}\frac{(-1)^n}{2n+1} = \frac{\pi}{4}

指示文(プロンプト):

ライプニッツ級数を用いて、円周率を計算する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]