Perl, Python, Erlang, C语言运行速度的比较

主要是通过 蒙特卡罗法来计算圆周率。代码如下:
1)  pi.pl:

$time1 = time();
foreach (1..20000000) {
  my($x, $y) = (rand(), rand());
  if(sqrt($x ** 2 + $y ** 2) < 1) {
    $total += 1;
  }
}
$pi = 4.0 * $total / 20000000;
$time2 = time();

print "Pi = " , $pi, " time = ", $time2 - $time1;

Perl脚本运行结果如下,2千万次平均执行时间是27秒左右:

2)pi.py

import random
import datetime
import math

starttime = datetime.datetime.now()
total = 0
for i in xrange(20000000):
    x, y = random.random(), random.random()
    if math.sqrt(x ** 2 + y ** 2) < 1:
        total += 1
pi = 4.0 * total / 20000000
endtime = datetime.datetime.now()
print "pi = ", pi , " time = ", (endtime - starttime).seconds

Python运行结果如下,2千万次平均执行时间是30秒左右:

3) pi.erl

-module(pi).
-export([pi/1]).

pi(N) ->
  pi(N, N, 0).

pi(N, 0, Total) -> 4.0 * Total / N;

pi(N, I, Total) ->
  X = random:uniform(),
  Y = random:uniform(),
  R = math:sqrt(X * X + Y * Y),
  if
    R < 1 -> pi(N, I - 1, Total + 1);
    true  -> pi(N, I - 1, Total)
  end.

Erlang运行如下,2千万次平均执行时间是30秒左右:

4) pi.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main() {
  time_t start_time, end_time;
  double elapsed_time;
  double x, y, pi;
  long i , total;
  total = 0;
  srand((unsigned)time(0));
  time(&start_time);
  for(i = 0 ; i < 20000000; i ++ ) {
    x = rand() / (double)(RAND_MAX);
    y = rand() / (double)(RAND_MAX);
    if (sqrt(x * x + y * y) < 1) {
      total += 1;
    }
  }
  pi = 4.0 * total / 20000000;
  time(&end_time);
  elapsed_time = difftime(end_time, start_time);
  printf(" total = %d, pi = %f, time = %f", total ,pi, elapsed_time);
}

C运行如下,
2千万次平均执行时间是3秒左右:

Python, Erlang 速度相当, Perl稍微快一丁点, C语言是它们的10倍。

时间: 2024-10-05 14:18:22

Perl, Python, Erlang, C语言运行速度的比较的相关文章

python与其他语言进行比较

最近python语言貌似比较火, 今天闲来无事,简单的看了下,算是个入门吧.一门语言之所以值得这么多人去学,必定有它的独到之处,下面我们就用python和其他语言做个比较. Pythond VS C# 1. Python跨平台,可以运行在linux.weindows等平台 2. Pythond开源,C#则相反 3. Python是解释型语言,C#需要编译,所以Python运行要慢点 Pythond VS Java Python更简洁,Java过于庞大复杂,语法很多 Python VS C C++

shell perl python 剖析

先不用说"无论什么语言都是一种工具".工具是我们身体的一部分,解放军解放台湾靠"小米加***"? "工具无所谓"论可以休矣.对于实际的软件工程工具和平台的选择是很重要的,有时候是致命的1. perl是强大的, perl=shell+awk+sed+一堆命令行工具.   但是反过来也一样shell+awk+sed+一堆命令行工具可以替代perl. 2. shell的简约,可读性比perl好,工具之间通过命令行stdio管道通信,任何一个小部分都可以

awk,perl,python的命令行参数处理

Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性化到家了,但是命令行上就很原始,但是很有分类感.还是会喜欢Perl一点(至少还可以动脑子,不至于生锈),感觉Perl是个杂合子,而python像胡彦斌,bash像韩红(最近看我是歌手第三季,嘻嘻).Bash就是家常菜了,虽然Perl可以大部分代替Bash的功能,像grep sort map等,但是某

Go/Python/Erlang编程语言对比分析及示例

本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴与它的三个祖先:C,Pascal和CSP.Go的语法.数据类型.控制流等继承于C,Go的包.面对对象等思想来源于Pascal分支,而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于CSP分支. Go/Python/Erlang语言特性对比 如<编程语言与范式>一文所说,不管语言如何层出不穷

python第一周语言基础

控制语句 if语句,当条件成立时运行语句块.经常与else, elif(相当于else if) 配合使用. for语句,遍历列表.字符串.字典.集合等迭代器,依次处理迭代器中的每个元素. while语句,当条件为真时,循环运行语句块. try语句,与except,finally配合使用处理在程序运行中出现的异常情况. class语句,用于定义类型. def语句,用于定义函数和类型的方法. pass语句,表示此行为空,不运行任何操作. assert语句,用于程序调试阶段时测试运行条件是否满足. w

用蒙特卡洛方法计算派-python和R语言

用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却想搞数据分析) 有趣的是书里面有一块讲蒲丰投针计算Pi,这是一种随机模拟法,也就是蒙特卡洛法.蒲丰投针之于我太难,暂时没想到怎么用计算机模拟这一过程. python课中,老师也提到用随机模拟法,也就是蒙特卡洛法(MonteCarlo),用计算机模拟几千次实验,计算pi的近似值.好巧. 就拿python课中的

Python重写C语言程序100例--Part8

''' [程序61] 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析: ''' if __name__ == '__main__': a = [] for i in range(10): a.append([]) for j in range(10): a[i].append(0) for i in range(10): a[i][0] = 1 a[i][i] = 1 for i in range(2,10): for j in range(1,i): a[i][j] = a[i

Python重写C语言程序100例--Part5

''' 程序31] 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母. 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. 2.程序源代码: ''' from sys import stdin letter = stdin.read(1) stdin.flush() while letter != 'Y': if letter == 'S': print 'please input second letter

split function of Perl,Python,Awk

使用中常用到Perl,Python,AWK,R, 虽然Java,C,C++,Vala也学过但是就是不喜欢,你说怎么办. 看来一辈子脚本的命. Perl @rray = split /PATTERN/, STRING, LIMIT 可以看出split由2部分(STRING,PATTERN)和可选的LIMIT部分构成,反正split么,万变不离其宗,都要有 你要split的String,split的界定,split的保存,其他的可以外加 我们举一个简单的例子: > cat test.txt (为了对