2009年2月5日木曜日

repeat命令のパラメータ その3

lengthはマクロかもしれないので
関数の戻り値をパラメータにして
ベンチマークを測ってみました
goto *@f
#defcfunc get
return 1000000
*@

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
repeat get(),0
a=a+1
loop
after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間A:"+t

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
n=get()
repeat n,0
a=a+1
loop

after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間B:"+t
stop

最初のベンチマークの方が若干早い
何度も関数呼び出しているのだろうか?
それほど遅くもないけれど
もう少し調べてみました
i=0
goto *@f
#defcfunc get
i++
return 1000000
*@

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
i=0
repeat get(),0
a=a+1
loop
after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間A:"+t
logmes "i = "+i

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
i=0
n=get()
repeat n,0
a=a+1
loop

after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間B:"+t
logmes "i = "+i
stop

今度はベンチマークの時間は同じでした

・というわけで結論
repeatのパラメータを参照するのは一度だけ

4 件のコメント:

Unknown さんのコメント...

こんにちは tyty です。
早速お邪魔しに来ました。

repeat の参照回数を確かめるためだったのですね。
実はこの計り方では短い時間でも分をまたいだ時とんでもない値が出ると思うんですけど大丈夫だったでしょうか?
これを直すには時間や日にちなどをさらに取得する必要があります。

今ふと思ったんですけど、これでもrepeatの評価回数が分かる気がしています(自信なし)。
a = 10
repeat a
mes cnt
a--
loop

y.tack さんのコメント...

ただいまー。y.tackどぇす
コメントありがとうございます→tytyさん
初めてかも→このブログにコメントしてくれた人

スクリプト書きもブログ/サイトの更新も
孤独な作業なので、気がついたことがあれば
コメントしてください
そんなことを感じながらやっているので
気付いたことがあった時は
他の人のBBS/ブログに
気楽にコメント/レス書いていますので
でもwikiみたいな中傷はダメですけど
中傷されると関わりたくなくなってしまうので

>実はこの計り方では短い時間でも分をまたいだ時
>とんでもない値が出ると思うんですけど
>大丈夫だったでしょうか?
一回変な値でました
原因はスクリプトがブログの幅からはみ出して
コピペしながら修正してたんですけど
修正し忘れでした
afterがbeforeになってました(笑)
いまだにコピペの癖が抜けなくて...
でも変な値が出てたら
関数を毎回参照してるという結論になってたかもしれないですね
危ない危ない

>今ふと思ったんですけど
>これでもrepeatの評価回数が分かる気がしています(自信なし)。
repeat毎回パラメータ調べるのに関数呼び出すのか?
が主題でした
そのサンプルスクリプトは僕の趣旨には合わないですね
でも考えてみると
毎回参照してたら
変数でも参照してることになるので
それでも趣旨どおりですね

Unknown さんのコメント...

> repeat毎回パラメータ調べるのに関数呼び出すのか?
> が主題でした
> そのサンプルスクリプトは僕の趣旨には合
わないですね

疑わしき可能性を全て潰して行くという発想が出来ていませんでした。
確かに変数を参照しているからといっても、関数を参照している事の証明に成りはしませんものね。ご指摘感謝です。

y.tack さんのコメント...

レスありがとうございます→tytyさん

わけのわからないブログ記事ばかりでスミマセン
スクロールするの大変でしたでしょうに

しかも今日はいつになくブログ書いてたりします
で、スクリプトは書いてない。と
やれやれ
これから書くか?もう寝るか?それが問題だ