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上应该不成立这个条件。

弄明白了https://stackoverflow.com/questions/9283717/why-c-program-compiled-for-x64-platform-is-slower-than-compiled-for-x86 虽然我没看懂我自己程序的汇编代码但是我觉得差不多是这个问题了。也就是说,编译器的锅。

解释型语言和编译型语言速度差别巨大,虽然针对各自的特点能对一些特别的地方进行优化,(比如记得java这种半解释型语言可以在运行时进行预测编译,从而在某些动态场景下比C/C++更快)但一般运行时的速度差别是由于语言性质决定的,只能无限得逼近编译行语言.

顺便贴一份自己看到的测试结果吧:https://cloud.tencent.com/developer/news/299769

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值