2016-12-07 6 views
2

技術的には4つのタイプのループ(for、while、repeat、goto/lbl)がありますが、どちらが "無限"を使うのが最も速いのですか?ここに私が意味するものは次のとおりです。TI-84 + Basicの最速無限ループとは何ですか?

while 1 
End 

repeat 0 
End 

lbl 1 
goTo 1 

for(n, 1, [number large enough to function as practically infinite] 
End 

これらの中で最も速いのはどれですか、さらに高速ですか?

+3

電卓がgoto文になるたびに、それはプログラムの始めから始まり、lblを見つけるまで下降します。 lblがプログラムの冒頭にない限り、gotosを避けるのがベストプラクティスです。 – bearacuda13

+0

開始時には、while/repeatよりもまだ遅いですか? – TrumpetDude

+0

そうだと思います。私は確かに分かりませんが、繰り返し0でEndが3バイトの場合、lbl1、goto1は4と考えられます。 – bearacuda13

答えて

4

サイズと速度の両方に関して、リピートループとwhileループが最も高速です。

While 1およびRepeat 0は両方とも2バイトであり、Endは1です。スペースに関しては、両方とも4バイトです。

速度に関しても同じことが言えます。無限にループして時間を計る単純なプログラムを作ってみてください。

TL; DR:While 1: EndRepeat 0: End

1

技術的には最速である:

AsmPrgm 
18FE 

アセンブリ・プログラムとして実行されなければなりません。

これは、Z80アセンブリを使用して無限ループ(リセットボタン以外で止めることができない)ループを作成しています。コードはプロセッサーによって直接実行されるため、OSはそれを解釈するのに時間を費やす必要はありません。

+1

"loop:jr loop"は反復ごとに12サイクルです。 "loop:jp loop"は10です。しかし、最速のZ-80無限ループは、1回の繰り返しにつき4サイクルで "ld hl、loop; loop:jp(hl)"です。しかし、絶対アドレスが必要なループを表現するために、TI-84 + BASICとそのAsmPrgmについては十分に分かりません。 –

+0

良い点。 'loop'の値はOSのバージョンによって異なり、電卓ごとに異なります。もちろん、カラー表示のTI-84を使用している場合は、私の答えには 'AsmPrgm'ではなくAsm84CPrgmが必要です。 – fuzzything44

関連する問題