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秒左右:
bubuko.com,布布扣

2)pi.py

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

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

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秒左右:
bubuko.com,布布扣

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秒左右:

bubuko.com,布布扣

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


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

评论关闭