| 1 | #!/bin/sh
|
| 2 | #
|
| 3 | # POSIX shell script to compute fibonacci many times in a loop. #
|
| 4 | # Shells have similar speeds:
|
| 5 | # dash: ~110 ms
|
| 6 | # ash: ~290 ms -- the fork is slower!
|
| 7 | # zsh: ~290 ms
|
| 8 | # mksh: ~380 ms
|
| 9 | # bash: ~430 ms
|
| 10 | # yash: ~460 ms
|
| 11 | #
|
| 12 | # Note: all shells use 64 bit integers on 64 bit platforms! But is that
|
| 13 | # justified? I want shell scripts to be portable!
|
| 14 | #
|
| 15 | # TODO: detect overflow in OSH.
|
| 16 | #
|
| 17 | # Note: fib(44) < 2^31, but fib(45) is greater
|
| 18 | # Note: fib(544) < 2^63, but fib(545) is greater
|
| 19 |
|
| 20 | iters=${1:-5} # first argument of every benchmark should be the number of iterations
|
| 21 |
|
| 22 | n=${2:-10} # fib(n)
|
| 23 |
|
| 24 | i=0
|
| 25 | while test $i -lt $iters; do
|
| 26 | j=0
|
| 27 |
|
| 28 | a=1 b=1
|
| 29 |
|
| 30 | while test $j -lt $n; do
|
| 31 | # a, b = b, a+b
|
| 32 | tmp=$b
|
| 33 | b=$((a+b))
|
| 34 | a=$tmp
|
| 35 |
|
| 36 | j=$((j+1))
|
| 37 | done
|
| 38 |
|
| 39 | echo $b
|
| 40 |
|
| 41 | i=$((i+1))
|
| 42 | done
|