Message
par caloubugs » 12 juin 2014 17:42
zpalm a écrit :
Sur le HP 71B tu peux détecter le dépassement de capacité avec le flag INX qui correspond à l'exception "résultat inexact" du standard IEEE 754, par ex:
Code : Tout sélectionner
10 S=0 @ A=0 @ INPUT 'Nombre : ';N @ T=TIME @ CFLAG MATH
20 IF N=1 THEN 40 ELSE IF MOD(N,2)=0 THEN N=N/2 @ S=S+1 @ GOTO 20
30 N=(N*3+1)/2 @ S=S+2 @ A=MAX(A,N) @ IF FLAG(INX) THEN 50 ELSE 20
40 T=TIME-T @ PRINT 'Vol : ';S;' Alt : ';A*2;' Tps : ';T @ END
50 PRINT 'Depassement capacite'
J'ai modifié la fin de la ligne 10 et la ligne 30.
Merci pour l'info : c'est bien le sujet avec cette machine, un langage super performant et donc une nécessité d'avoir une vision globale des possibilités pour pouvoir en tirer le maximum (d'où le sentiment d'être en possibilité permanente d'améliorer les performances du code).
En prenant compte tes modifs (attention à la ligne 30, il faut bien A=MAX(A,N*2)) :
J'obtiens :
ULAM(77031) --> Vol : 350 Alt : 21933016 Temps : 13.83 (un chouilla mieux, mais le test est plus simple)
ULAM(33554431) donne un dépassement de capacité (2^25-1) - Ca marche effectivement au vol 48 (valeur de S lue après fin du programme) où N>5*10^11 après la division par 2.
ULAM(16777215) --> Vol : 474 Alt : 564859072960 Temps : 19.05 (2^24-1)
RetroGeek, mais pas que...
HP : 15C, 41CV, 48GX, 71B, 75C Canon X-07 Sharp PC 1403H, PC1500A, PC1600, PC-G850V Texas : CC40, 66, 74, 95, 92 Casio : PB-700, PB-1000, Z-1GR Psion 5mx, mais pas que...