2016-12-07 2 views
2

Puisqu'il existe techniquement 4 types de boucles (pour, while, repeat, et goto/lbl), lequel est le plus rapide à utiliser "infiniment"? Voici ce que je veux dire:Quelle est la boucle infinie la plus rapide de la 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 

Lequel est le plus rapide, ou y at-il un plus rapide?

+3

Chaque fois que la calculatrice obtient une instruction goto, elle commence au tout début du programme et descend jusqu'à ce qu'elle trouve le lbl. C'est la meilleure pratique pour éviter gotos à moins que le lbl est au tout début du programme. – bearacuda13

+0

Si c'est au début, est-ce encore plus lent que while/repeat? – TrumpetDude

+0

Je suppose que c'est. Je ne sais pas avec certitude, mais si répéter 0 alors End est trois octets combinés, alors je pense que lbl1 puis goto1 serait quatre. – bearacuda13

Répondre

4

En termes de taille et de vitesse, les boucles de répétition et de boucle sont les plus rapides. Les deux

While 1 et Repeat 0 sont tous les deux 2 octets, tandis que End est 1. En termes d'espace, ils sont tous les deux 4 octets.

En termes de vitesse, la même chose est vraie. Essayez juste de faire un programme simple qui boucle à l'infini et l'heure.

TL; DR: While 1: End et Repeat 0: End

1

techniquement le plus rapide est la suivante:

AsmPrgm 
18FE 

qui doit être exécuté en tant que programme de montage.

Ceci utilise l'assemblage Z80 pour créer une boucle infinie (impossible à arrêter par le bouton de réinitialisation). Le code est exécuté directement par le processeur, de sorte que le système d'exploitation n'a pas besoin de passer du temps à l'interpréter.

+1

"loop: jr loop" est de 12 cycles par itération. "loop: jp loop" est 10. Mais la boucle infinie Z-80 la plus rapide est "ld hl, loop; boucle: jp (hl)" à 4 cycles par itération. Cependant, je ne connais pas assez la TI-84 + BASIC et son AsmPrgm pour exprimer ces boucles qui nécessitent des adresses absolues. –

+0

Bon point. La valeur de 'loop' dépend de la version de votre système d'exploitation et diffère selon la calculatrice. Bien sûr, ma réponse nécessite également 'Asm84CPrgm' au lieu de simplement' AsmPrgm' si vous utilisez une TI-84 avec affichage couleur. – fuzzything44