您的位置:首页 > 编程语言

斐波那契(Fibonacci)数列测试几种编程语言速度

2011-04-27 12:44 435 查看
CPU: Pentium Dual-Core 3.20GHz

RAM: 2.00GB

操作系统:Ubuntu 10.10

编译器/解释器

语言编译器/解释器版本
Cgcc4.4.5
C++g++4.4.5
HaskellGHC - The Glorious Glasgow Haskell Compilation System

6.12.1
Lua
Python2.6.6
Javagcjjava version "1.5.0"

gij (GNU libgcj) version 4.4.5
测试结果如下:

Fibonacci of 40:

===================

C: 102334155

real 0m1.234s

user 0m1.232s

sys 0m0.000s

*******************

C++

C: 102334155

real 0m1.383s

user 0m1.380s

sys 0m0.000s

*******************

Haskell: 102334155

real 0m1.352s

user 0m1.348s

sys 0m0.000s

*******************

fib1

Haskell: 102334155

real 0m18.957s

user 0m18.937s

sys 0m0.016s

*******************

run haskell script

Haskell: 102334155

real 0m1.362s

user 0m1.344s

sys 0m0.012s

*******************

Lua: 102334155

real 0m18.367s

user 0m18.365s

sys 0m0.000s

*******************

Python: 102334155

real 0m37.623s

user 0m37.562s

sys 0m0.036s

*******************

pyc

Python: 102334155

real 0m37.930s

user 0m37.846s

sys 0m0.036s

*******************

Java: 102334155

real 1m18.012s

user 1m17.953s

sys 0m0.024s

*******************

可以明显看出来,速度由快到慢的顺序是:

C、Haskell、C++、Lua、Python、Java

得到以下结论:

C最快

Haskell比动态语言快

动态语言中,最快的是Lua

Java排在最后,有点意外

测试源代码文件如下:

// C和C++的源程序

// file: fib.c

#include <stdio.h>

#include <stdlib.h>

long fib(int n)

{

switch (n) {

case 0:

return 0;

case 1:

return 1;

default:

return fib(n-1)+fib(n-2);

}

}

main(int argc, char *argv[])

{

if (argc != 2)

printf("Usage: fibc <number>/n");

else

printf("C: %ld/n", fib(atoi(argv[1])));

}

-- file: fib.hs

module Main where

import System.Environment (getArgs)

fib :: Int -> Int

fib 0 = 0

fib 1 = 1

fib n = fib (n-1) + fib (n-2)

main = do

argv <- getArgs

if length argv /= 1

then

putStrLn "Usage: fib <number>"

else

--print $ fib $ read $ head argv

putStrLn ("Haskell: " ++ (show $ fib $ read $ head argv))

-- file: fib1.hs

module Main where

import System.Environment (getArgs)

fib 0 = 0

fib 1 = 1

fib n = fib (n-1) + fib (n-2)

main = do

argv <- getArgs

if length argv /= 1

then

putStrLn "Usage: fib <number>"

else

putStrLn ("Haskell: " ++ (show $ fib $ read $ head argv))

// file: fib.java

public class fib {

public static long fib_(int n) {

if (n <= 2)

return 1;

else

return fib_(n-1)+fib_(n-2);

}

public static void main(String [] args) {

if (args.length != 1) {

System.out.println("Usage: java fib <number>");

} else {

int n = Integer.parseInt(args[0]);

System.out.println("Java: " + fib_(n));

}

}

}

# file: fib.lua

function fib(n)

if (n <= 2) then

return 1

else

return fib(n-1)+fib(n-2)

end

end

if (#arg ~= 1) then

print("Usage: lua fib.lua <number>")

else

print("Lua: " .. fib(tonumber(arg[1])))

end

# file: fib.py

import sys

def fib(n):

if n <= 2:

return 1

else:

return fib(n-1) + fib(n-2)

if len(sys.argv) != 2:

print "Usage: python fib.py <number>"

else:

print "Python: " + str(fib(int(sys.argv[1])))

Makefile

DEST=fibc fibcxx fib fib1 fib.class fib.pyc

all: $(DEST)

test: $(DEST)

echo "./test.sh <number>"

fibc: fib.c

$(CC) -o $@ $< -O2

fibcxx: fib.c

$(CXX) -o $@ $< -O2

fib: fib.hs

ghc -o $@ $< -O2

fib1: fib1.hs

ghc -o $@ $<

fib.class: fib.java

javac $<

fib.pyc: fib.py

pycompile $<

clean:

$(RM) $(DEST) *.o *.hi

#!/bin/bash

# file: speed.sh

echo Fibonacci of $1:

echo ===================

time ./fibc $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

echo C++

time ./fibcxx $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

time ./fib $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

echo fib1

time ./fib1 $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

echo run haskell script

time runhaskell fib.hs $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

time lua fib.lua $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

time python fib.py $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

echo pyc

time python fib.pyc $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

time java fib $1

echo /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: