Misez rapide, accélérez n°1

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

caloubugs
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 434
Enregistré le : 05 juin 2014 22:23
Localisation : Dans le Gâtinais avec les abeilles, près de Fontainebleau

Re: Misez rapide, accélérez n°1

Message par caloubugs »

zpalm a écrit :
alain1261 a écrit : J'avais des résultats inconstants sur la HP41 (programme plus lent malgré certaines optimisations 8O ) jusqu'à ce que je fasse un GTO.. systématiquement après chaque modification du programme dans la calculatrice.
C'est aussi ce que je fait après chaque modification :)
8O Gnééé ?

J'ai du mal à comprendre pourquoi un Goto remet tout en place, c'est sacrément étonnant quand même !
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...
caloubugs
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 434
Enregistré le : 05 juin 2014 22:23
Localisation : Dans le Gâtinais avec les abeilles, près de Fontainebleau

Re: Misez rapide, accélérez n°1

Message par caloubugs »

Sinon pour le fun :slime: , mais c'est relatif, le programme suivant sur HP39gII :

Code : Tout sélectionner

EXPORT Premier()
BEGIN
INPUT(N);
0►F;RECT();INT(√N)►S;
2►D;IF irem(N,D)=0 THEN D►F; END;
3►D;IF irem(N,D)=0 AND F=0 THEN D►F; END;
5►D;IF irem(N,D)=0 AND F=0 THEN D►F; END;
7►D;IF irem(N,D)=0 AND F=0 THEN D►F; END;
WHILE D<S AND F=0 DO
4+D►D;IF irem(N,D)=0 THEN D►F;BREAK; END;
2+D►D;IF irem(N,D)=0 THEN D►F;BREAK; END;
4+D►D;IF irem(N,D)=0 THEN D►F;BREAK; END;
2+D►D;IF irem(N,D)=0 THEN D►F;BREAK; END;
4+D►D;IF irem(N,D)=0 THEN D►F;BREAK; END;
6+D►D;IF irem(N,D)=0 THEN D►F;BREAK; END;
2+D►D;IF irem(N,D)=0 THEN D►F;BREAK; END;
6+D►D;IF irem(N,D)=0 THEN D►F;BREAK; END;
END;
IF F THEN
TEXTOUT_P(N,1,1);
TEXTOUT_P("est divisible par",1,15,1,1);
TEXTOUT_P(F,100,15);
ELSE
TEXTOUT_P(N,1,1);
TEXTOUT_P("est premier",1,15,1,1);
END;
FREEZE;
END;
Résultats :
10000019 : 1"5
31629593 : 2"5
999999937 : 11"5
Résultat : 999999937 en 11"5...

Et moins de 2 secondes pour le dernier si on utilise la fonction isprime() intégrée (mais on est hors du sujet :arrow: )
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...
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez rapide, accélérez n°1

Message par zpalm »

caloubugs a écrit : 8O Gnééé ?

J'ai du mal à comprendre pourquoi un Goto remet tout en place, c'est sacrément étonnant quand même !
GTO.. compacte la mémoire programme.
caloubugs
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 434
Enregistré le : 05 juin 2014 22:23
Localisation : Dans le Gâtinais avec les abeilles, près de Fontainebleau

Re: Misez rapide, accélérez n°1

Message par caloubugs »

zpalm a écrit : GTO.. compacte la mémoire programme.
Ok merci, le monde de la 41 est un monde à part :mrgreen:
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...
caloubugs
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 434
Enregistré le : 05 juin 2014 22:23
Localisation : Dans le Gâtinais avec les abeilles, près de Fontainebleau

Re: Misez rapide, accélérez n°1

Message par caloubugs »

Zou, une version en langage machine sur HP71B (je sais, c'est pas du jeu, mais c'est quand même l'aboutissement...).

Rien inventé, c'est le programme PRIMLEX disponible sur les LIF files (bon je ne désespère pas arriver à le faire moi-même un jour.
Il utilise les optimisations prises ici.

Code : Tout sélectionner

        LEX    'PRIMLEX'
        ID     #71
        MSG    0
        POLL   0
POP1N   EQU    #0BD1C   Pop N à tester dans A
TST12A  EQU    #0D476   Teste 2 nombres à 12 chifres virgule flottante
DV2-12  EQU    #0C4A8   Divise ...
CLRFRC  EQU    #0C6F4   <=> INT et carry levé  si FP=0
FLTDH   EQU    #1B223   12 chifres décimal flottant -> HEXA dans A(A)
HDFLT   EQU    #1B31B   Le contraire, de A(A) dans A
MPY     EQU    #0ECBB   A*C en HEXA
HXDCW   EQU    #0ECB4   C(W) HEXA -> décimal
FLOAT   EQU    #1B322   Entier décimal cadré à droite -> 12 chiffres flottant dans A(W)
FNRTN1  EQU    #0F216   Retour
        ENTRY  PRM
        CHAR   #F
        KEY    'PRIM'
        TOKEN  30
        ENDTXT
        NIBHEX 811
PRM     GOSBVL POP1N
        R0=A            N sauvé en R0
        C=0    W        Prépare D, diviseur à tester
        R1=C            D -> R1
        P=     2        Divisible par 2 ?
        GOSUB  TEST
        P=     1        ... par 3 ?
        GOSUB  TEST
        P=     2        ... par 5 ?
        GOSUB  TEST
        P=     2        Etc ...
        GOSUB  TEST
BCL     A=R1            Début test primalité
        GOSBVL FLTDH
        C=0    W
        C=A    A        D en HEXA dans C(A) ...
        A=C    W        ... et A(A)
        SETHEX
        GOSBVL MPY      D^2
        GOSBVL HXDCW
        GOSBVL FLOAT    D^2 en décimal dans A pour le test
        C=R0            N -> C
        ?A=C   W        D^2=N ?
        GOYES  F3       ...oui : N carré parfait
        P=     4        Test >
        GOSBVL TST12A   D^2>N ?
        GOC    FIN2     ...oui : N premier
        P=     4        Boucle évitant les multiples de 2, 3 et 5 parmi les diviseurs
        GOSUB  TEST
        P=     2
        GOSUB  TEST
        P=     4
        GOSUB  TEST
        P=     2
        GOSUB  TEST
        P=     4
        GOSUB  TEST
        P=     6
        GOSUB  TEST
        P=     2
        GOSUB  TEST
        P=     6
        GOSUB  TEST     Fin boucle
        GOTO   BCL
F3      GOTO   FIN3     Saut intermédiaire ( GOC limité à 128 quartets dans chaque sens )
FIN2    C=R0            Retourne le premier ( gag interne... ) diviseur trouvé
        GOVLNG FNRTN1
TEST    C=0    W        Test de divisibilité
        C=P    0
        R2=C            P -> C(0)
        A=R1
        GOSBVL FLTDH    D -> HEXA
        C=A    A
        A=0    W
        A=C    A        Ancien D dans A(A)
        C=R2
        A=A+C  A        Nouveau D
        GOSBVL HDFLT    D en décimal flottant pour sauvegarde
        R1=A
        A=R0            N -> A
        C=R1            D -> C
        GOSBVL DV2-12   A/C et résultat en 15 chiffres sur A-B
        GOSBVL CLRFRC   Lève le carry s'il n'y a pas de FP
        RTNNC           Retour si FP#0 ( N non divisible par D )
FIN1    C=RSTK          Pop le GOSUB en attente
FIN3    C=R1            Retourne N, nombre premier
        GOVLNG FNRTN1
        END
Du coup le programme basic tient sur une seule ligne :tongue:

Code : Tout sélectionner

INPUT N @ A=TIME @ G=PRIM(N) @ DISP TIME-A;G 
Le programme à vide sans le calcul de G prend 0"03...

Du coup on obtient pour les calculs :
1231 : 0"12
71327 : 0"80
123679 : 0"96
1000003 : 3"01
8043509 : 7"69
10000019 : 9"72 (tiens, il aurait battu Bolt cette année)
31629593 : 17"56
998812807 : 1'43"19
999999937 : 1'43"25

Et pour une fois, le ratio sqr(n)/temps baisse avec le nombre (ça doit être la complexité de manipulation de ces nombres et leur stockage en nibbles).
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...
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez rapide, accélérez n°1

Message par C.Ret »

zpalm a écrit :Je l'ai testé sur ma 41CX et ton programme est bien plus rapide que le mien :D C'est ta 41C qui doit être moins rapide que ma CX.
alain1261 a écrit :Bravo pour ces résultats. :wink:
Il me semble avoir lu que les 41C étaient légèrement plus rapide que les CV/CX :?:

J'avais des résultats inconstants sur la HP41 (programme plus lent malgré certaines optimisations 8O ) jusqu'à ce que je fasse un GTO.. systématiquement après chaque modification du programme dans la calculatrice. :idea:
Je me souviens avoir modifié mon programme sur l'HP-41C et l'avoir teté sans faire aucun "compactage" par GTO ...
Mes temps incohérents doivent donc bien venir de là.

J'ai donc modifié mon code pour qu'il soit strictemetn identique à celui de zpalm et j'ai effectué un GTO .. avant tout essais.

J'obtients les temps suivant qui sont très lègèrement inférieurs à ceux abservé sur l'HP-41CX. Cela provient peut-être su fait que le programme est absolument le seul en mémoire (lancé en mode USER à l'aide de la touche E à l'aide de l'asignation ASN "MRA" 15

Au passage, chapeau pour le remplissage de la pile avec N à l'aide des deux additions; je n'avais pas vue l'astuce avant de modifier mon code :)

Code : Tout sélectionner

   nombre      41CX      41C
    71327     11"80    11"67 
   123679     14"31    14"22
  1000003     41"16    38"13
  8043509   1'41"83  1'45"95
 10000019   2'07"90  1'58"56
 31629593   3'46"93  3'31"25
998812807  21'28"07  
999999937  21'30"25 19'53"44

Code : Tout sélectionner

             zpalm  zpalm  zpalm  C.Ret   C.Ret  C.Ret  C.Ret   gégé alain1261  caloubugs caloubugs caloubugs caloubugs
           HP-41CX HP-29E 15C-LE  C128D  HP-41C HP-28S  TI-74 PB-700    PB-100      TI-95 Canon X07  HP-39gII    HP-71B
     1231                     "6     "1     2"6     "4     "4                         1"5        1"                0"12
    71327    11"80   24"8     "7     "8    11"7    2"2    2"9    27"         3"       7"         3"                0"80
   123679    14"31   29"9            "9    14"3    3"0    3"6     5"         8"                                    0"96
  1000003    41"16 1'28"5    1"6    2"7    38"2    5"9    9"9  1'19"        14"      23"        11"                3"01
  8043509  1'41"83 3'41"9    3"5    6"7  1'46"0   14"1   23"6  3'14"                                      1"5      7"69
 10000019  2'07"90 4'36"7    4"3    8"4  1'58"6   18"9   29"4                      1'11"        36"                9"72
 31629593  3'46"93 8'11"0    7"3   14"8  3'31"3   31"8   51"4                      2'06"      1'04"       2"5     17"56
998812807 21'28"07          39"0 1'23"0         3'00"4                                                          1'43"19
999999937 21'30"25          39"1 1'23"2 19'53"5 3'00"7 4'45"5                     11'45"      6'15"      11"5   1'43"25

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
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez rapide, accélérez n°1

Message par Marge »

Bonsoir / Bonjour à tous,

C'est un sujet très intéressant dans lequel je n'ai pas pu m'investir faute de temps (silipok-gazette-boulot), mais que j'ai suivi de loin en loin...
Et pour cause ! j'ai voulu, il y a quelques mois me lancer dans un travail statistique sur les premiers avec ce type de raccourci algorithmique (mais j'avais visé moins haut, juste incorporer dans les mémoires les premiers premiers pour éviter des calculs excessifs. L'algorithme proposé par caloubugs est bien meilleur !).

Je suis très content que zpalm ait acquis un(e) HP-29e, ce doit être une belle machine, j'avoue que j'hésite à en acquérir une (même si ses progrès sont moindres, en proportion, que ceux de la 25), mais là, je commence franchement à manquer de place... je ferai aussi une MAJ dans l'article pour la G6 à ce sujet, à la fin - c'était prévu...
(j'adore voir les LEDs rouges clignoter dans tous les sens pendant l'exécution d'un programme):
C'était, zpalm, réellement ce qui me fascinait sur la 29c, qu'elle tourne ainsi pendant des heures, je la laissais branchée (la belle époque !) près de mon lit, le soir, et c'était féérique.

Il faudrait justement comparer les affichages de la 29e et la 29c, je me suis toujours demandé ce que ça affichait réellement... car certains chiffres sont clairement lisibles sur une partie de l'affichage, mais le reste... à filmer et ralentir ?

Je vous apporte les temps de ma 29c pour certains nombres de zpalm (avec le programme de zpalm à partir du pas 15), à classer donc avec les autres.
(z, x<y n'existe pas sur la 29, c'est "inférieur ou égal", mais le pgm fonctionne :D )

Code : Tout sélectionner

1 231        6" 5/10
2 007        1"
71 327       30" 5/10
123 679      37"
1 000 003    1' 52"
8 043 509    4' 45"
10 000 019   5' 55"
Ces chiffres, chronométrés à l'aide d'un chronomètre analogique, sont naturellement à prendre avec précaution. J'ai observé que tout comme la HP-29c, le chronomètre démarre quand on relâche le bouton... la tradition, ça a du bon...

A bientôt !
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3787
Enregistré le : 10 janv. 2009 13:47

Re: Misez rapide, accélérez n°1

Message par Tipoucet »

Marge a écrit : .../...Il faudrait justement comparer les affichages de la 29e et la 29c, je me suis toujours demandé ce que ça affichait réellement... car certains chiffres sont clairement lisibles sur une partie de l'affichage, mais le reste... à filmer et ralentir ?
Mode hors sujet

8O Idée féconde à mon avis. Beaucoup de vieilles machines affichent mille choses incompréhensibles lors des calculs. L'idée de filmer et repasser au ralenti est sans doute très intéressante 8O

Fin du hors sujet
Dominique
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez rapide, accélérez n°1

Message par zpalm »

Marge a écrit :Je suis très content que zpalm ait acquis un(e) HP-29e, ce doit être une belle machine, j'avoue que j'hésite à en acquérir une (même si ses progrès sont moindres, en proportion, que ceux de la 25), mais là, je commence franchement à manquer de place... je ferai aussi une MAJ dans l'article pour la G6 à ce sujet, à la fin - c'était prévu...
J'ai trouvé une 29C défectueuse que je réparée en 29E. J'ai aussi prévu une mise à jour de mon article pour la G6 :wink:
Marge a écrit :Il faudrait justement comparer les affichages de la 29e et la 29c,
A priori ils devraient être identique puisque la 29E utilise l'afficheur et les circuits d'affichage d'origine de la 29C et ne fait qu'émuler le code, elle doit donc piloter l'affichage de la même façon (à la différence de la NP 25 qui ne pilote pas les segments de l'affichage de la même façon que la HP 25).
Marge a écrit :je me suis toujours demandé ce que ça affichait réellement... car certains chiffres sont clairement lisibles sur une partie de l'affichage, mais le reste... à filmer et ralentir ?
J'ai fait rapidement un test avec mon smartphone et ma 29E mais le résultat n'est pas très probant, j’obtiens un fichier de près de 200 Mo pour moins d'une minute de video. Il me faudrait un pied photo pour avoir une bonne image et retravailler la video avec un logiciel adapté.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez rapide, accélérez n°1

Message par C.Ret »

Code : Tout sélectionner

             zpalm  zpalm  zpalm  C.Ret   C.Ret  C.Ret  C.Ret   gégé alain1261  caloubugs caloubugs caloubugs caloubugs   marge
           HP-41CX HP-29E 15C-LE  C128D  HP-41C HP-28S  TI-74 PB-700    PB-100      TI-95 Canon X07  HP-39gII    HP-71B  HP-29C
     1231                     "6     "1     2"6     "4     "4                         1"5        1"                0"12     6"5
    71327    11"80   24"8     "7     "8    11"7    2"2    2"9    27"         3"       7"         3"                0"80    30"5
   123679    14"31   29"9            "9    14"3    3"0    3"6     5"         8"                                    0"96    37"
  1000003    41"16 1'28"5    1"6    2"7    38"2    5"9    9"9  1'19"        14"      23"        11"                3"01  1'52"
  8043509  1'41"83 3'41"9    3"5    6"7  1'46"0   14"1   23"6  3'14"                                      1"5      7"69  4'45"
 10000019  2'07"90 4'36"7    4"3    8"4  1'58"6   18"9   29"4                      1'11"        36"                9"72  5'55"
 31629593  3'46"93 8'11"0    7"3   14"8  3'31"3   31"8   51"4                      2'06"      1'04"       2"5     17"56
998812807 21'28"07          39"0 1'23"0         3'00"4                                                          1'43"19
999999937 21'30"25          39"1 1'23"2 19'53"5 3'00"7 4'45"5                     11'45"      6'15"      11"5   1'43"25
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
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez rapide, accélérez n°1

Message par Marge »

Merci C.ret.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez rapide, accélérez n°1

Message par C.Ret »

bernouilli92 a écrit :Rien ne t'empêche d'initialiser ces registres au début de ton programme.
C'est ce que je fais dans le code suivant.
Après environ une 1/2 heure d'initialisation, 3401 nombres premiers sont mémorisés et utilisés pour tester rapidement(*) tout nombre entier jusqu'à 1'000'000'000

Code : Tout sélectionner

list

1 DATA 2,3,5
2 DATA 4,2,4,2,4,6,2,6,-1

10 FAST : PRINT "init" : m%=4095 : T0=TIMER : D=2 : p%=2 : P=5 : DIM P(m%)
20 READ P(0),P(1),P(2)
30 DO
40 :  P=P+D : i%=-1 : DO : i%=i%+1 : Q=P/P(i%) : LOOP UNTIL Q=INT(Q) OR Q<P(i%)
50 :  IF Q<>INT(Q) THEN p%=p%+1 : P(p%)=P 
60 :  READ D : IF D<0 THEN RESTORE 2 : GOTO 60
70 LOOP WHILE P<31622
80 PRINT "init done "; : GOSUB 1000
90 PRINT "primes: 2 3 5 7 ...";P(p%);" (";p%;")"

100 SLOW : i%=-1 : INPUT P : FAST : T0=TIMER : PRINT "[UP][ESC][@]";
110 DO : i%=i%+1 : Q=P/P(i%) : IF Q=INT(Q) THEN PRINT P;"=";P(i%);".";Q, : EXIT
120 LOOP UNTIL Q<P(i%) : IF Q<P(i%) THEN PRINT P;" is prime",
130 GOSUB 1000 : GOTO 100

1000 T=(TIMER-T0)/60 : T%=T/60 : PRINT USING "###'##".#";T%,T-60*T%,T-INT(T): RETURN 

ready.
RUN
init
init done                     34'51".1
primes: 2 3 5 7 ...  31627 ( 3401 )
      1231  is prime           0'00".2
     71327  is prime           0'00".8
   1000003  is prime           0'02".2
   8043509 = 2543 . 3163       0'04".9
  10000019  is prime           0'06".0
  31629593  is prime           0'09".9
 998812807 = 31601 . 31607     0'45".4
 999999937  is prime           0'45".5
? _
Mais bon, même si les temps sont proches de ceux obtenus sur une HP-15 LE, il y a quand même presque 35 min d'attente lors du premier lancement du programme.

Heureusement, on peut aussi sauvegarder tous ces nombres premiers sur le disque ! Mais, même avec un lecteur C=1571, il faudra plus de 7 min pour les sauvegarder et les re-charger.


(*) Rapidement c'est à dire en moins d'une minute :)
Modifié en dernier par C.Ret le 09 sept. 2015 22:11, 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.
caloubugs
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 434
Enregistré le : 05 juin 2014 22:23
Localisation : Dans le Gâtinais avec les abeilles, près de Fontainebleau

Re: Misez rapide, accélérez n°1

Message par caloubugs »

C.Ret a écrit :
bernouilli92 a écrit :Rien ne t'empêche d'initialiser ces registres au début de ton programme.
C'est ce que je fais dans le code suivant.
Après environ une 1/2 heure d'initialisation, 3401 nombres premiers sont mémorisés et utilisés pour tester rapidement(*) tout nombre entier jusqu'à 1'000'000'000
Joli ! En fait c'est la méthode du gros café en attendant que mémère soit prête, ensuite ça carbure...
Par contre c'est sur quelle bécane ? La 1211 ?
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...
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez rapide, accélérez n°1

Message par C.Ret »

Ah! Oui pardon, j'ai pas précisé.

C'est sur un Commodore C128D. Je sais c'est pas un pocket, même s'il a une grosse poignée sur le coté.

Pour le PC-1211, il fauda ce limiter à environ 204 registres en mémoire au lieu des 3401. Je suis en train de cogiter cela. Je pense utiliser l'interface SHARP CE-121 (ou CE-122) pour charger depuis une cassette les nombres premiers.

Je pense qu'avec les temps de chargment, on va vite dépasser la vitesse de la lumière !
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.
alain1261
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 21
Enregistré le : 11 juil. 2015 00:28

Re: Misez rapide, accélérez n°1

Message par alain1261 »

Une version pour Psion, ici un Psion 3 tout simple.

Les variables sont en entier long pour aller plus vite.
Du coup, la valeur max que l'on peut tester est 2'147'483'647

En flottant c'est beaucoup plus lent (x10 il me semble) :?

Code : Tout sélectionner

PROC ISPRIME:
	LOCAL A&,B&,C&,D&,E&
	START::
	PRINT "N=? (0 to quit)",
	INPUT A&
	IF A&=0 :RETURN :ENDIF
	BEEP 2,200
	C&=2 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
	C&=3 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
	C&=5 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
	C&=7 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
	C&=11 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
	C&=13 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
	B&=SQR(A&)/30
	D&=1
	WHILE D&<=B&
		E&=30*D&
		C&=E&-13 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
		C&=E&-11 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
		C&=E&-7 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
		C&=E&-1 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
		C&=E&+1 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
		C&=E&+7 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
		C&=E&+11 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
		C&=E&+13 :IF A&=(A&/C&)*C& :GOTO DONE:: :ENDIF
		D&=D&+1
	ENDWH
	C&=1
	DONE::
	PRINT C&
	BEEP 2,400
	GOTO START::
ENDP
:idea: Le copier coller facilite bien la saisie.

:arrow: Psion 3 256K :
1'000'003 : <1"
8'043'509: 1"
10'000'019 : 2"
31'629'593 : 3"
998'812'807 : 16" (31601)
999'999'937 : 16"

Pas mal pour une machine de 1991 :D

J'ai essayé avec une table pour les constantes (-13, -11, -7, -1, +1, +7, +11, +13), et une double boucle mais c'est plus lent (999'999'937 en 22").
L'élégance ne paie pas ! :lol:
Mon parcours : TI30 -> F-73 -> PC1261 -> PC1475 -> TI92 -> Voyage 200
Répondre

Retourner vers « Tous les Pockets »