はじめに
一般にPythonは遅いと言われているが、実際に他言語と比べてどれだけ遅いのかを調べてみた。
測定方法
PythonとJavaの2言語間で、円周率を近似するプログラムを走らせる。
それぞれの差から実行速度が何倍異なるかを調べた。
結論
JAVAのほうが、Pythonより約60倍速いと思われる。
ただし、円周率の近似の結果値をうまく出力できなかったため、本記事だけではJAVAのほうが速いと主張できない。
やったこと
近似式
ライプニッツの公式から円周率を近似した。
π = 4{(1-1/3)+(1/5-1/7)+...(1/[4n+1] - 1/[4n+3] ) }
で求まるらしい。
実行時間の測定方法
Java、Pythonともに、
(計算の実行終了時刻 - 計算の実行開始時刻)
を用いて実行時間を求めた。
Pythonのコード
import time
num = 100000000 # 計算の繰り返し回数
pi = 0 # 円周率の近似値
if __name__ == '__main__':
start = time.time()
pi = 0
for i in range(num):
pi += (1 / (i * 4 + 1) - 1 / (i * 4 + 3))
print(pi4) # 3.141592153589902
elapsed_time = time.time() - start
print("elapsed_time:% .2f" % elapsed_time + "[sec]")
Javaのコード
public class SpeedTest{
public static void main(String[] args){
long startTime = System.currentTimeMillis();
//以下に計測する処理を記述
int num = 100000000; // 計算の繰り返し回数
float pi = 0; // 円周率の近似値を4で割ったもの
float pi4 = 0; // 円周率の近似値
for(int i = 0;i<num; i++){
pi += (1 / (i * 4 + 1) - 1 / (i * 4 + 3));
}
pi4 = pi * 4;
//以上、計測する処理内容
long endTime = System.currentTimeMillis();
System.out.println(pi4);
System.out.println("time:" + (endTime - startTime)+"[msec]");
}
}
結果
Python、Javaともに1億回の処理をそれぞれ2回行ったところ、
Pythonでは33.88 sec, 31.55 sec
平均32.72 secが得られた。
Javaでは528 msec, 568 msec
平均548 msecが得られた。
--> 平均0.548 sec
以上のことから、PythonとJavaでは59.71倍の実行速度差が存在する。
一方で、円周率の近似値の出力では、
Pythonでは3.1415926445762157が得られ、
Javaでは4.0が得られた。
π = 3.1415926535...
であるため、
Pythonでは8桁の精度で求められたのに対して、
Javaでは精度としては1桁も合っていない。
これはfloat型などでは計算結果が勝手に丸まってしまうことに由来するようだ。
Javaで計算が正しく行われたかどうかが明らかでないため、この結果からJAVAのほうが速い!と言い張るのは難しい。
環境
Python... Python3.6.8, PyCharm 2019.1.2
Java... JAVA10.0.2, Eclips Photon Release (4.8.0)
参考URL
【Python】処理にかかる時間を計測して表示
https://qiita.com/fantm21/items/3dc7fbf4e935311488bc
【Java入門】処理時間をナノ秒・マイクロ秒で計測する方法
https://www.sejuku.net/blog/44904