shellから起動とemacsから読み込むのとでの速度の違い

計算時間がたりない

昨日のことは勘違いらしいです。コメントをもらいました。

  • 関数の処理時間が短すぎると、実際の関数以外の部分でたくさん時間がかかる。
  • 同じ処理を何度か繰り返したりして関数の処理時間を長くするといい。

どれくらいが十分な処理時間なのか分からないので、とりあえず長くかかりそうなものをさがしてみました。
たらい回し関数というのが良さそうな感じです。以下のようなコードを使うことにしました。

たらい回し関数

#!/usr/bin/gosh

(define (tarai a b c)
  (if (<= a b)
      b
      (tarai
       (tarai (- a 1) b c)
       (tarai (- b 1) c a)
       (tarai (- c 1) a b))))

(define (main args)
  (time (apply tarai (map string->number (cdr args)))))

計測方法

shellから呼び出す時には

gosh tarai.scm 12 6 0

emacsから呼び出す時には

(time (apply tarai '(12 6 0)))

という感じで実行しました。

結果

結果は以下のようになりました。(realの部分の数値だけ抜き取りました。)

#shellから直接呼び出した方
[2.091, 2.096, 2.097, 2.091, 2.098, 2.096, 2.107, 2.112, 2.107, 2.107, 2.088, 2.088, 2.086, 2.092, 2.098, 2.086, 2.086]
#emacsから呼び出した方
[2.097, 2.108, 2.103, 2.077, 2.12, 2.1, 2.194, 2.106, 2.135, 2.108, 2.092]

速度にこれといって違いはみつけられません。
昨日の早い早くないというのは、確かに誤差の範囲だったみたいです。