TI-nspire CX II-T versus HP Prime G1

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar du membre
Over_score
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 171
Enregistré le : 26 mars 2019 14:55
Localisation : Pas loin de Smartville

TI-nspire CX II-T versus HP Prime G1

Message par Over_score »

Salut tout le monde,

je lis presque partout, et vois sur youtube que le HP est plus rapide que la TI (oui je dis le HP et la TI). Et ça me paraît logique vu les processeurs et fréquences d'horloges utilisés par l'un et l'autre.
Mais, moi j'ai un programme qui montre l'inverse… Je l'utilise un peu partout sur mes pockets pour tester empiriquement leur vitesse avec un exemple pas très compliqué.

Programme HP :

Code : Tout sélectionner

export diviseur(c)
begin
  local l,p,d,i;
  p:={1,1,2,2,4,2,4,2,4,6,2,6,4,2,4,6,6,2,6,4,2,6,4,6,8,4,2,4,2,4,8,6,4,6,2,4,6,2,6,6,4,2,4,6,2,6,4,2,4,2,10,2,10};
  l:=floor(sqrt(abs(c)));
  d:=1;
  i:=1;
  while d<l do
    d:=d+p(i);
    if mod(c,d)=0 then
      return {d, c/d};
    end;
    i:=i+1;
    if i>53 then
      i:=6;
    end;
  end;
  return {c,1};
end;
Programme TI :

Code : Tout sélectionner

Define LibPriv diviseur(c)=
Func
  Local l,p,d,i
  p:={1,1,2,2,4,2,4,2,4,6,2,6,4,2,4,6,6,2,6,4,2,6,4,6,8,4,2,4,2,4,8,6,4,6,2,4,6,2,6,6,4,2,4,6,2,6,4,2,4,2,10,2,10}
  l:=floor(√(abs(c)))
  d:=1
  i:=1
  While d<l
    d:=d+p[i]
    If mod(c,d)=0 Then
      Return {d,((c)/(d))}
    EndIf
    i:=i+1
    If i>53 Then
      i:=6
    EndIf
  EndWhile
  Return {c,1}
EndFunc
Pour calculer diviseur(3601800221), la TI donne {60013,60017} en 7,9" (10,8" si USB branché) et le HP idem en 17,9" (USB branché ou non)
Par ailleurs, diviseur(36018002217733) donne {4065179,8860127} en 8'51" sur la TI et {2, 1.80090011088E13} (FAUX !) en 0,1" sur le HP !

Y a-t-il quelque chose à configurer pour accélérer le HP ? Désactiver CAS, donner des types aux variables ou que sais-je ?
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: TI-nspire CX II-T versus HP Prime G1

Message par C.Ret »

Over_score a écrit : 19 juin 2021 11:35 Salut tout le monde,

je lis presque partout, et vois sur youtube que le HP est plus rapide que la TI (oui je dis le HP et la TI).
Salut,

Tiens c'est marrant, je fais exactement l'inverse, je parle d'une HP Prime (c'est une calculatrice car on vois très clairement les touches [ SIN ][ COS ][ TAN] au milieu du clavier. Alors que je dis un TI NSpire CX-T car, comme un HP-28S, son clavier ne comporte pas l'alignement traditionnel des trois touches trigo :)
Et ça me paraît logique vu les processeurs et fréquences d'horloges utilisés par l'un et l'autre.
Mais, moi j'ai un programme qui montre l'inverse… Je l'utilise un peu partout sur mes pockets pour tester empiriquement leur vitesse avec un exemple pas très compliqué.
[...]
Pour calculer diviseur(3601800221):
* le * TI donne {60013,60017} en 7,9"
* la * HP donne {60013,60017} en 17,9"
Ca c'est possible, plus une machine a de fonctions et de possibilités, plus les programmes utilisateurs sont parfois long à s'exécuter. Le Ti NSpire a peut-être un moyen d'éviter ce travers. En tout cas, la Hp prime évite ce travers, avec ton code (correctement saisi) je trouve ce dernier résultat en environ 3 secondes:
Diviseurs HP Prime avec le code correct.png
Diviseurs HP Prime avec le code correct.png (6.73 Kio) Vu 3787 fois
Cela prouve donc que ton programme est bien adapté au TI NSpire et est incorrect pour une HP Prime.

Pour la HP Prime, on obtiens les dits facteurs instantanément si on l'utilise convenablement, c'est à dire dans le CAS et avec la fonction native :
Diviseurs HP Prime native CAS function ifactor.png
Diviseurs HP Prime native CAS function ifactor.png (11.34 Kio) Vu 3787 fois
Evidemment, utiliser la fonction native de la Prime ne permet pas de comparer quoique ce soit avec le système NSpire.

Ce qui m'inquiète est que mon antique TI-92 II trouve les diviseurs de 3601800221 en seulement 26"53
Si on utilise la fonction native du NSpire, c'est j'espère immédiat comme pour la Prime ?
Par ailleurs, diviseur(36018002217733) donne {4065179,8860127} en 8'51" sur la TI et {2, 1.80090011088E13} (FAUX !) en 0,1" sur le HP !

Y a-t-il quelque chose à configurer pour accélérer le HP ? Désactiver CAS, donner des types aux variables ou que sais-je ?
Ben justement tel que mal écrit dans le post précèdent, le code n'utilise pas du tout le CAS de la prime qui donc se limite strictement à 12 chiffres significatifs et donc l'algorithme plante dès le test du facteur 2 par la fonction modulo.

Pour obtenir le résultat attendu sur l'HP Prime, il suffit de déclarer le même code (correctement saisi attention au copier-coller qui emmènent des caractères cachés et aux variations de syntaxe entre fonction numérique et fonction CAS) comme étant une fonction CAS et celle-ci utilisera l'arithmétique entière de précision infinie ce qui évitera le résultat faux. Mais je ne sais pas si cela va accélérer les choses.
Je me doute que non.

EDIT:
VERSION RAPIDE POUR MODE HOME (mais limité à des entiers de 12 chiffres)

Code : Tout sélectionner

EXPORT DIVISEURS(c)
BEGIN
  LOCAL p:={1,1,2,2,4,2,4,2,4,6,2,6,4,2,4,6,6,2,6,4,2,6,4,6,8,4,2,4,2,4,8,6,4,6,2,4,6,2,6,6,4,2,4,6,2,6,4,2,4,2,10,2,10};
  LOCAL l:=FLOOR(SQRT(ABS(c))),d:=1,i:=1;
  WHILE d<l DO
    d:=d+p(i);
    IF c MOD d=0 THEN RETURN {d, c/d}; END;
    i:=i+1; IF i>53 THEN i:=6 END;
  END;
  RETURN {c,1};
END;

VERSION CAS pour entiers jusqu'à 10^24 (mais plus lent):

Code : Tout sélectionner

div(c):=
BEGIN
  LOCAL p:={1,1,2,2,4,2,4,2,4,6,2,6,4,2,4,6,6,2,6,4,2,6,4,6,8,4,2,4,2,4,8,6,4,6,2,4,6,2,6,6,4,2,4,6,2,6,4,2,4,2,10,2,10};
  LOCAL l:=FLOOR(√(ABS(approx(c))));
  LOCAL d:=approx(1),i:=approx(1);
  WHILE d<l DO
    d:=d+p[i];
    IF c MOD d=0.0 THEN RETURN {d, c/d}; END;
    i:=i+1.0; IF i>53.0 THEN i:=6.0 END;
  END;
  RETURN {c,1};
END;

Désolé pour cette édition du message initial qui a pris une heure. J'utilise ne ce moment une version béta et à l'occasion des captures et programmations pour répondre ici, j'ai découvert un bug concernant la distinction entre fichiers CAS (ppl) et CAS(Python). Ce qui m'a fait perdre du temps.

HP Prime Graphing Calculator

Software Version: 2.1.14588 (2021 05 05)
Hardware Version: C (c'est bien une G1)
CAS Version: 1.5.0
Serial Number: 3CD66202N1
Operating System: V0.050.640

(c) 2021 HP Development Compagny, L.P.


Modifié en dernier par C.Ret le 20 juin 2021 07:57, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Over_score
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 171
Enregistré le : 26 mars 2019 14:55
Localisation : Pas loin de Smartville

Re: TI-nspire CX II-T versus HP Prime G1

Message par Over_score »

C.Ret a écrit : 19 juin 2021 19:03 Tiens c'est marrant, je fais exactement l'inverse, je parle d'une HP Prime
:mrgreen:
Si on utilise la fonction native du NSpire, c'est j'espère immédiat comme pour la Prime ?
Oui ! C'est factor(3601800221) et le résultat est immédiat.

LA différence entre ton programme et le mien qui est en cause pour la vitesse est le test

Code : Tout sélectionner

if c mod d=0 then …
au lieu de

Code : Tout sélectionner

if mod(c,d)=0 then …
En changeant simplement ce test, l'exécution se fait en 3,0". Je trouve ça surprenant !
Avatar du membre
dprtl
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 463
Enregistré le : 27 janv. 2013 00:26
Localisation : Strasbourg
Contact :

Re: TI-nspire CX II-T versus HP Prime G1

Message par dprtl »

D'après les spécifications publiques, la TI-nspire CX II-T possède un CPU 32 bits de type ARM9 cadencé à 396 MHz, qui semble assez proche de celui de la HP Prime G1, cadencé à 400 MHz. En dehors des différences liées à la qualité des implémentations logicielles, on ne voit donc pas trop comment il pourrait y avoir de gros écarts entre ces deux calculettes ?
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: TI-nspire CX II-T versus HP Prime G1

Message par C.Ret »

dprtl a écrit : 19 juin 2021 23:12En dehors des différences liées à la qualité des implémentations logicielles, on ne voit donc pas trop comment il pourrait y avoir de gros écarts entre ces deux calculettes ?
Over_score a écrit : 19 juin 2021 20:56LA différence entre ton programme et le mien qui est en cause pour la vitesse est le test if c mod d=0 then … au lieu de if mod(c,d)=0 then …
En changeant simplement ce test, l'exécution se fait en 3,0". Je trouve ça surprenant !
Moi aussi, je suis très surpris et comme dprtl je pense que la différence provient très certainement de la partie logicielle et du fait que sur les G1 il y a un coprocesseur indépendant pour les E/S (ce qui explique la vitesse apparente identique avec ou sans USB).

Ce qui me surprend surtout c'est le comportement bizarre de la version béta concernant la rigueur de la syntaxe, il y a plein d'instructions non documentées et nouvelles. La différence de temps d'exécution est peut-être aussi lié à cette version en développement et un format d'échange avec le Connectivity Kit en pleine rénovation ??
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: TI-nspire CX II-T versus HP Prime G1

Message par C.Ret »

J'aime bien l'algorithme d' Over_Score, il est fait des astuces que j'aime utiliser, en particulier la liste p des incréments qui permettent d'éviter de tester les facteurs multiples de 2 3 5 ou 7. A chaque tours de roue de cette liste, on avance de 210 unité et il y a, surtout pour les facteurs avant 10'000 une très majorité de facteurs premiers.

Code : Tout sélectionner

p:={1,1,2,2, 4,  2,  4,  2,  4,  6,  2,  6,  4,  2,  4,  6,  6,  2,  6,  4,  2,  6,  4,  6,  8,  4,  2,  4,  2,  4,  8,  6,  4,  6,  2,  4,  6,  2,  6,  6, 4,   2,  4,  6,  2,  6,  4,  2,  4,  2, 10,  2, 10};
    . . . .  .   
    2 3 5 7 11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73  79  83  89  97 101 103 107 109 113     127 131 137 139     149 151 157 163 167     173 179 181     191 193 197 199     211      
               223 227 229 233 239 241     251     257 263 269 271 277 281 283     293     307 311 313 317 319     331 337     347 349 353 359     367 373     379 383 389     397 401         419     421 431
               433     439 443 449     457 461 463 467     479     487 491     499 503 509     521 523             541 547     557     563 569 571 577     587     593 599 601 607     613 617 619     631 641
               643 647     653 659 661         673 677 683     691     701     709     719 727     733     739 743 751 757 761     769 773         787     797         809 811     821 823 827 829 839        
               853 857 859 863         877 881 883 887             907 911     919     929 937 941     947     953     967 971 977     983     991 997        1009...   


Evidemment, plus on avance dans les grands nombres, plus les multiple apparaisse dans la liste des facteurs générés par cette méthode.

Alors, je me suis dit, je vais faire le malin et accélérer considérablement l'algorithme d'Over_Score en utilisant astucieusement les instructions et mod de l'HP Prime.

Alors, j'ai modifier quelque peu son algorithme afin de battre des records de vitesse sur ma HP Prime G1.

Et j'ai été très fier de voir comme mon idée a bien améliorée les performances de ma calculette; jugez des performances :
HP Prime G1 Over_Score mod_3601800221.png
HP Prime G1 Over_Score mod_3601800221.png (9.16 Kio) Vu 3624 fois
C'est pas mal hein ?


Mais très vite j'ai déchanté. J'ai d'abors cru à une panne (une liaison USB plantée ?), mais non pour 36018002117733, ma G1 a toujours besoin d'autant de temps :
HP Prime G1 Over_Score mod_36018002217733.png
HP Prime G1 Over_Score mod_36018002217733.png (10.68 Kio) Vu 3608 fois

Voilà, la moralité de la chose, une bonne idée n'en est pas toujours une :( il y a toujours dans la vie des moments comme celui-ci où l'on se heurte à un rock et sa fait mal :(:(

Je donne quand même l'infâme code:

Code : Tout sélectionner

divrs(n)
 BEGIN
   LOCAL a:=2;
   LOCAL b:=IP(√n);
   LOCAL T:=TICKS();
   WHILE a<b DO
     IF n MOD a THEN nextprime(a)▶a ELSE RETURN {a,n/a,eTime(T)}; END;
     IF n MOD b THEN prevprime(b)▶b ELSE RETURN {b,n/b,eTime(T)}; END;
   END;
   RETURN {1,n,eTime(T)};
 END;
Ainsi vous comprendrez mieux pourquoi il est si efficace pour 5041 et 36001800221 et si peu pour d'autres entiers !
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Répondre

Retourner vers « Tous les Pockets »