python和c++速度差別(計算pi)

計算方法

有萊布尼茲公式
由萊布尼茲公式變形後得到的在這裏插入圖片描述
要是想用其他算法可以參考這裏https://www.zhihu.com/question/312520105

代碼

c

//萊布尼茲公式求PI 取MAX k=1,000,000,000

#include<stdio.h>
#define TIMES 1000000000

int main()
{
	long double pi=0;
	for (double i = 0; i < TIMES; i++)
	{
		pi += 1 / ((4 * i + 1) * (2 * i + 1) * (i + 1));

	}
	pi *= 3;

	printf("%.12llf", pi);
}

python

pi=0;
MaxK=1000000000
i=0
while(i<MaxK):
	pi += 1 / ((4 * i + 1) * (2 * i + 1) * (i + 1));
	i+=1
pi *= 3;

print(f"{pi:.12f}");

運行結果

運行環境都是VS2019,64位處理器,intel i7 8550U 3.24MHZ(基準1.8MHZ) C代碼分爲

  • DEBUG模式,沒有優化。x86
  • RELEASE,x86
  • RELEASE,x86-64
    Python使用得是CPython

這裏採用了VS自帶的代碼分析器,感覺計時代碼影響實際結果更精確一點,不過也沒差。
VS的編譯器和GCC的優化上有區別,各有千秋,同樣的C代碼速度不同,似乎VS更快一點?
C/C++
在這裏插入圖片描述
Python
在這裏插入圖片描述
等了10幾分鐘,真TM後悔選了個這麼大的數
無優化下速度相差186.8倍。一般而言C/C++要比python快150~400倍

C/C++(release)

在這裏插入圖片描述
C/C++(release x64)
在這裏插入圖片描述
優化前後C代碼速度差別大概是3倍。
優化後的C是PY的629.897 ÷ 1.825 =‬345.14倍。( ̄_, ̄ )
比較奇怪得是64位程序居然比32位要慢,我沒大想明白,我猜可能是和處理器字長和程序裏得數據長度有關。關於這個問題我在網上也沒有找到相似的問題,唯一一個相似的問題是在講android,是由於x64指針尋址更慢導致的。但在同一cpu上應該不成立這個條件。

解釋型語言和編譯型語言速度差別巨大,雖然針對各自的特點能對一些特別的地方進行優化,(比如記得java這種半解釋型語言可以在運行時進行預測編譯,從而在某些動態場景下比C/C++更快)但一般運行時的速度差別是由於語言性質決定的,只能無限得逼近編譯行語言.

順便貼一份自己看到的測試結果吧:https://cloud.tencent.com/developer/news/299769

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章