En termes de nouvelles fonctionalités intégrées à la ROM, on peut dire que la HP-15C était bien fournie. Jugez plutôt : calculs avec les nombres complexes (e^(2i.Pi) = 1 ... ou presque), calcul matriciel (dim maxi 8 x 8), résolution numérique d'équations, intégration numérique, fonctions statistiques, etc.
Mais en performance pure ça donne quoi ? Que vaut le CPU "Nut" à 220 kHz de la HP-15C, en techno CMOSC, face au CPU à 180 kHz de la HP-25 en techno P-MOS ? Eh bien, aussi étonnant que cela puisse paraître, c'est la HP-25 qui est la plus rapide !
En tout cas, avec mon programme légèrement adapté (sans optimisation), le même calcul sur le nombre premier 524 287 prend plus de 8 minutes sur la HP-15C ! La HP-25 serait donc, à la louche, 60% plus rapide ?
"Ce nombre est-il premier ?" pour HP-15C |
En tout, il y a 4 pas de programmes en plus à cause des labels. Sur HP-15C le simple GTO vers un numéro (hors label) n'est plus supporté en mode programme. De plus, le test "x >= y" n'est plus sur une touche, mais en indirect (TEST 9). Je ne pense pas que cela suffise à expliquer un tel écart de performance ?
Deux calculatrices "dans leur jus" |
Une autre implémentation pour la HP-15C du même algorithme est disponible sur http://www.hpmuseum.org/software/15prnuck.htm.
Salut Daniel !
RépondreSupprimerJe suis tombé un peu par hasard sur ton blog. En lisant ton code pour déterminer si un nombre est premier, je me suis rendu compte qu'il faisait 39 pas comme le mien.
J'ai donc essayé avec 524287 en mesurant le temps nécessaire. Mon HP-15C a mis moins de 3'52" grâce à deux "petites" astuces. Il n'est pas nécessaire de calculer la racine carrée. Lors du test de divisibilité où l'on divise n par F, le quotient q=n/F doit être supérieur à F, sinon c'est que l'on a dépassé la racine.
L'autre perfectionnement consiste à ne pas tester tous les facteurs F impairs. Mon code teste les facteurs 2 3 5 et 7 puis 8 facteurs judicieusement choisis pour chaque tranche de 30 unités qui suivent. Le pas moyen d'avancement est donc alors de 3.75 au lieu de 2. Les 8 facteurs sont déterminés de telle sorte qu'ils ne sont pas des multiples de 2 3 ou 5.
000-
001- LBL A
002- CLREG STO 0 GSB 2 1 GSB 0 GSB 2 GSB 2
009- LBL 1 GSB 3 GSB 3 GSB 4 GSB 6 GSB 2 GSB 6 GTO 1
017- LBL 3 GSB 4
019- LBL 2 2 GTO 0
022- LBL 4 4 GTO 0
025- LBL 6 6
027- LBL 0 STO+1 1 RCL 1 RCL 0 RCL/1 x0? RTN
038- RDN
039- R/S
Voilà; évidemment , ce code est utilisable sur une HP-25 qui sera à nouveau plus rapide. qu'une HP-15C !
Merci pour ce programme. Belle optimisation en effet !
SupprimerBonjour Daniel,
RépondreSupprimerAvec la HP15C Collector's Edition le test prend 4 secondes pour 524 287.
En utilisant la fonction ISG, avec ce code, 1=>Premier, 0=>Factorisable :
001 - f LBL A
002 - STO 0
003 - 2
004 - ÷
005 - f FRAC
006 - g x=0
007 - GTO 1
008 - RCL 0
009 - √x̅
010 - g INT
011 - .
012 - 0
013 - 2
014 - +
015 - 3
016 - CHS
017 - 10ˣ
018 - ×
019 - 3
020 - +
021 - STO 1
022 - f LBL 0
023 - RCL 0
024 - RCL 1
025 - g INT
026 - ÷
027 - f FRAC
028 - g x=0
029 - GTO 1
030 - f ISG 1
031 - GTO 0
032 - 1
033 - g RTN
034 - f LBL 1
035 - 0
036 - g RTN