re-Bonjour !C.Ret a écrit : ↑17 avr. 2021 14:50 Bonjour, et bienvenue sur le forum !
Oui, la limite s'explique très bien. Pour calculer FRAC(n/2), il faut dans un premier temps calculer n/2. Or, on est limité à 12 chiffres, donc tout ira bien jusqu'à ce que l'on ai à diviser un nombre entier n impair de justement 12 chiffres supérieur ou égal à 2.10^11 car il y aura forcément un soucis pour représenter exactement le résultat de la division.
C'est ce qu'on appelle une erreur d'arrondi (round-off error), c'est l'apparition de ce type de soucis qui me permet d'arrêter le programme sur la version pour HP-71B par l'instruction TRAP INeXact.
P.S.: Les résultats obtenus avec le nouveau firmware de ma Prime pour 63728127 et 127456254 sont confirmés par mon HP-71B en respectivement 30.56" et 30.61".
Un HP-71B n'est donc que 13.7x plus lent qu'une HP Prime G1 !!
Je me doutais bien que la division par 2 butait sur la mantisse ou qqch comme ça, j'ai assez vite incriminé la division. Mais MOD s'en sort bien dans ce cas-ci , une chance.
J'ai repris mon code initial écrit (en fait) sur l'émulateur iHP48, que j'ai ré-écrit dans la 50g (maintenant qu'elle est arrivée, autant en profiter). Ensuite j'ai vu ta version RPL 28S plus haut, bien torchée, bravo . Je l'ai reprise, analysée et complétée avec les TICKS et MOD, comme ça je peux débloquer pour les plus grands nombres et comparer l'effet bénéfique du 100% pile versus utilisation de variables locales.
Dans ma version j'ai essayé cette fonction INCR (incrémente une variable et laisse la nouvelle valeur dans la pile).
Gestion misérable/innocente du MAX, ça se voit que je ne code plus :
(transfert du texte via SD...ça aussi c'est nouveau)
Code : Tout sélectionner
«TICKS SWAP 0. DUP -> m c
« WHILE DUP 1. >
REPEAT 'c' INCR DROP
IF DUP 2. MOD
THEN 3. * 1. +
IF DUP m >
THEN DUP 'm' STO
END
ELSE 2. /
END
END DROP c m
» TICKS 4. ROLL - B->R 8192. /
»
pour 63,728,127 : 10.62 s
Ton code modifié avec utilisation du MOD et les TICKS
Code : Tout sélectionner
« TICKS SWAP DUP 0.
WHILE ROT DUP 1. >
REPEAT
IF DUP 2. MOD
THEN 3. * 1. +
ELSE 2. /
END ROT OVER MAX
ROT 1. +
END DROP TICKS 4.
ROLL - B->R 8192. /
»
pour 27 sur 50GX : 0.95 s (et sur HP 48GX réelle : 2.61 s)
pour 63,728,127 sur 50GX : 8.5 s ( et sur HP 48GX réelle : 25.2 s)
pour 127456254 : 8.48 s
L'amélioration du programme (avec la gestion de la pile, donc) permet de gagner du temps de calcul : -20% !
Ta Prime est ici 3.8 fois plus rapide que la 50g.
Voilà un avantage de la Prime supplémentaire que j'ignorais : le travail sur les grands nombres.
Rem: c'est quoi ce caractère "triangle noir" ? le STO ? (edit : j'arrive pas à lancer ce programme, j'ai un (!) orange. La syntaxe est correcte. RTFM )