相关疑难解决方法(0)

关于改进Has​​kell在Fibonacci微基准测试中与C相比的性能

我遇到了这个问题,它比较了各种编译器在计算斐波那契数字时的表现.

我尝试用Haskell做这个,看看它与C的比较.

C代码:

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

int fib (int n) {
  if (n < 2) return 1;
  return fib (n-1) + fib (n-2);
}

int main (int argc, char* argv[]) {
  printf ("%i\n", fib (atoi(argv[1])));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

> gcc -O3 main.c -o fib
> time ./fib 40
165580141
real    0m0.421s
user    0m0.420s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)

哈斯克尔:

module Main where
import System.Environment (getArgs)

fib :: Int -> Int
fib n | n < 2 = 1
      | …
Run Code Online (Sandbox Code Playgroud)

performance haskell ghc micro-optimization microbenchmark

14
推荐指数
3
解决办法
2703
查看次数

OCaml MicroBenchmark

我正在尝试将c与ocaml进行基本的微基准比较.我听说对于斐波纳契程序,c和ocaml大致相同,但我无法复制这些结果.我用gcc -O3 fib.c -o c-code编译c代码,并用ocamlopt -o ocaml-code fibo.ml编译OCaml代码.我通过使用时间./c-code和时间./ocaml-code计时.每次我这样做OCaml需要0.10秒,而c代码每次约为0.03秒.除了这是一个天真的基准,有没有办法让ocaml更快?谁能看到他们电脑上的时代是什么?

C

#include <stdio.h>

int fibonacci(int n)
{
    return n<3 ? 1 : fibonacci(n-1) + fibonacci(n-2);
}

int main(void)
{
    printf("%d", fibonacci(34));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

OCaml的

let rec fibonacci n = if n < 3 then 1 else fibonacci(n-1) + fibonacci(n-2);;
print_int(fibonacci 34);;
Run Code Online (Sandbox Code Playgroud)

c benchmarking ocaml

2
推荐指数
1
解决办法
407
查看次数

C中的斐波纳契数列

这是预期的输出:

替代文字http://i48.tinypic.com/f1lfuh.jpg

我们要制作一个计算Fibonacci序列的C程序.我们最多只允许3个变量,我们不允许使用循环.而且我不知道该怎么做以及如何开始.

我希望你们能帮助我.:/

c math

-2
推荐指数
5
解决办法
2629
查看次数