:
sum_to () (
set -- $(seq $1)
IFS=+
echo "$*" | bc
)
sum=$(sum_to 5)
echo $sum
:
$ time sum_to 1000000
500000500000
real 0m2.545s
user 0m2.513s
sys 0m0.189s
$ sum_to_2 () { { seq $1 | tr '\n' '+'; echo 0; } | bc; }
$ time sum_to_2 1000000
500000500000
real 0m0.727s
user 0m0.981s
sys 0m0.037s
:
$ sum_to_3 () { perl -le '$n=$ARGV[0]; $sum += $n-- while $n; print $sum' $1; }
$ time sum_to_3 1000000
500000500000
real 0m0.075s
user 0m0.071s
sys 0m0.002s
Worser: ""
$ sum_to_slow () {
sum=0
for i in $(seq $1); do
sum=$(expr $sum + $i)
done
echo $sum
}
$ date; time sum_to_slow 1000000; date
Mon Mar 17 14:00:53 EDT 2014
^C
$ date
Mon Mar 17 14:07:01 EDT 2014
Ctrl-C . , bash
$ sum_to_slow_improved () { sum=0; for i in $(seq $1); do (( sum += i )); done; echo $sum; }
$ time sum_to_slow_improved 1000000
500000500000
real 0m4.937s
user 0m4.869s
sys 0m0.124s
2 , Perl