斐波那契(Fibonacci)数列测试几种编程语言速度
2011-04-27 12:44
435 查看
CPU: Pentium Dual-Core 3.20GHz
RAM: 2.00GB
操作系统:Ubuntu 10.10
编译器/解释器
测试结果如下:
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 /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
RAM: 2.00GB
操作系统:Ubuntu 10.10
语言 | 编译器/解释器 | 版本 |
---|---|---|
C | gcc | 4.4.5 |
C++ | g++ | 4.4.5 |
Haskell | GHC - The Glorious Glasgow Haskell Compilation System | 6.12.1 |
Lua | ||
Python | 2.6.6 | |
Java | gcj | java 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 /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
相关文章推荐
- 斐波那契数列(fibonacci)两种python实现的效率对比
- python实现经典算法(2):Fibonacci(斐波那契)数列
- 09_Fibonacci斐波那契数列
- Fibonacci(斐波那契)数列(一)
- 编程语言EF速度测试(7):recursive
- 【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)
- java例程练习(用两种方式求斐波那契[fibonacci]数列)
- 七种方式求斐波那契(Fibonacci)数列通项
- 斐波那契(Fibonacci)数列的计算效率
- 测试jdbc几种操作mysql数据方法的速度
- 经典算法研究-斐波那契(fibonacci)数列
- 斐波那契数列(Fibonacci)(递归,非递归)(动态规划,自顶向下,自底向上)
- 栈的应用一--斐波那契(Fibonacci)数列的实现(代码)
- 七种方式求斐波那契(Fibonacci)数列通项
- 斐波那契(Fibonacci)数列
- 算法之递归算法(斐波那契数列之美)(100级阶梯,1,2步,几种方法)
- 编程语言EF速度测试(5):binary-trees
- 斐波那契(Fibonacci)数列
- 【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)
- 斐波那契数列--之优化(Fibonacci)