加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 23:52:17 所属栏目:大数据 来源:网络整理
导读:主要是通过? 蒙特卡罗法来计算圆周率。代码如下: 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 = ",$

主要是通过?蒙特卡罗法来计算圆周率。代码如下:
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,(endtime - starttime).seconds

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

3) pi.erl

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

pi(N) ->
  pi(N,N,0).
  
pi(N,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,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,elapsed_time);   
}



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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读