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

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 »

Ah, bonne idée, j'essaierai ça sur le 3a pour voir.
:idea: Le copier coller facilite bien la saisie.
En effet, c'est un énorme avantage sur les Pocket Computers Sharp, Casio, etc.
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é.
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 »

Quelques machines supplémentaires de testées :

Code : Tout sélectionner

   nombre      PB-1000   FX-880P   PC-1403   Psion5MX
    71327           3"        2"        8"      <0"02
   123679           3"        3"       10"       0"02
  1000003          10"        9"       31"      0"02 
  8043509          27"       22"     1'18"       0"03
 10000019          34"       27"     1'38"       0"05
 31629593        1'00"       48"     2'54"       0"08
998812807        5'34"     4'31"    16'26"       0"42
999999937        5'35"     4'31"    16'27"       0"44
Les 2 Casios se valent de très près même avec 4 ans de différence d'âge...

Le PC 1403 souffre de l'absence d'un FRAC ou d'un MODULO.
Le PB-1000 a un MODULO mais limité aux nombres inférieurs à 2^16 (entiers courts...) donc on prend le FRAC (et on prend 10 % de perf dans les dents).

Le Psion parait monstrueux, mais c'est l'avantage du langage OPL... Heureusement qu'il y a possibilité d'avoir un chrono intégré...

Code : Tout sélectionner

INCLUDE "System.oxh"
INCLUDE "Date.oxh"
PROC premier:
LOCAL n&,d&,fl%,s&,id&
PRINT "n= "
INPUT n&
id&=DTNOW&:
fl%=1:s&=int(SQR(n&))
d&=2:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
d&=3:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
d&=5:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
d&=7:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
WHILE fl% AND d&<=s&
  d&=d&+4:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
  d&=d&+2:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
  d&=d&+4:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
  d&=d&+2:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
  d&=d&+4:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
  d&=d&+6:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
  d&=d&+2:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
  d&=d&+6:IF mod&:(n&,d&)=0 :fl%=0 :ENDIF
ENDWH
IF fl%=1 :d&=n& :ENDIF
id&=DTMICROSDIFF&:(id&,DTNOW&:)
PRINT d&, id&
GET
ENDP
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
Marcus von Cube
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 914
Enregistré le : 20 avr. 2006 13:48
Localisation : Wehrheim, Allemagne
Contact :

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

Message par Marcus von Cube »

Voilà ma version pour la WP 34S (adaption du programme de c.ret) :

Code : Tout sélectionner

001  LBL'MRA'
002    TICKS  STO 00  Rv
006    FILL  # 005  RMDR  x=0?  GTO 01
010    CLx   # 003  RMDR  x=0?  GTO 01
015    CLx   # 002  RMDR  x=0?  GTO 01
020    STO L
021  LBL 00
022    X<> L  # 006  +  RMDR  x=0?  GTO 01
028    X<> L  # 004  +  RMDR  x=0?  GTO 01
034    X<> L  # 002  +  RMDR  x=0?  GTO 01
040    X<> L  # 004  +  RMDR  x=0?  GTO 01
046    X<> L  # 002  +  RMDR  x=0?  GTO 01
052    X<> L  # 004  +  RMDR  x=0?  GTO 01
058    X<> L  # 006  +  RMDR  x=0?  GTO 01
064    X<> L  # 002  +  RMDR  x=0?  GTO 01
070    X<> L  x^2  x<=? Y  GTO 00
074    Rv  STO L
075  LBL 01
076    RCL L  TICKS  RCL- 00  x<> Y
084  END
Résultats (Vers 3.3T 3841) :

Code : Tout sélectionner

   nombre       34S       34 
               DECM      INT
   
    71327      0"20     0"10
   123679      0"20     0"10
  1000003      0"50     0"40
  8043509      1"20     0"80
 10000019      1"50     1"00
 31629593      2"60     1"70
998812807     14"30     8"90
999999937     14"30     8"90
La résolution du TICKS est 0,1". La 34S est équipé d'un quartz.
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

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

Message par Gilles59 »

zpalm a écrit : 29 août 2015 10:29 Il serait intéressant de voir ce que ça donne sur fx-602p.
Avec ce programme de 149 pas (adaptation du programme pour PB100 de alain1261) :

Code : Tout sélectionner

**P0
Min01/ 2  Min03 = FRAC x=0 GOTO8
MR01 / 3  Min03 = FRAC x=0 GOTO8
MR01 / 5  Min03 = FRAC x=0 GOTO8
MR01 / 7  Min03 = FRAC x=0 GOTO8
MR01 / 11 Min03 = FRAC x=0 GOTO8
MR01 / 13 Min03 = FRAC x=0 GOTO8

MR01 SQR / 30 = INT Min00 
0 Min04

LBL1
 1 M+04
 MR04 x 30 - 13 = Min03
 MR01 / MR03 = FRAC x=0 GOTO8
 2 M+03 MR01 / MR03 = FRAC x=0 GOTO8
 4 M+03 MR01 / MR03 = FRAC x=0 GOTO8
 6 M+03 MR01 / MR03 = FRAC x=0 GOTO8
 2 M+03 MR01 / MR03 = FRAC x=0 GOTO8
 6 M+03 MR01 / MR03 = FRAC x=0 GOTO8
 4 M+03 MR01 / MR03 = FRAC x=0 GOTO8
 2 M+03 MR01 / MR03 = FRAC x=0 GOTO8
DSZ GOTO1

MR01 GOTO9 

LBL8
MR03

LBL9
Ca donne les temps suivants :

1231 : 1,5"
71327 : 7.8"
123679 : 10"
1000003 : 30"
10000019 : 1'33"
31629593 : 2'45"

EDIT : Casio FX603P, même programme ~ 3x plus rapide

1231 : 0,5"
71327 : 2,5"
123679 : 3,5"
1000003 : 10"
10000019 : 30"
31629593 : 52"

Le code est volontairement redondant pour accélerer la recherche. Un Gosub donnerait un programme bien plus compact mais forcément plus lent. A tester
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

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

Message par Gilles59 »

Une version HP Pascal pour HP49 et 50G :

Code : Tout sélectionner

Program Premier;

Uses SystemHP,CrtHPmini_49,MathsHP;
Var n,b,d : Integer;
    c : Char;

Procedure Divis(a:Integer);
Begin
 If (n MOD a)=0 Then Begin
  WriteLn(a); c:=ReadKey; Halt;
 End;
End;

Begin 
 ClrScr; ReadLn(n);
 Divis(2); Divis(3); Divis(5); 
 Divis(7); Divis(11); Divis(13);  
 For b:=1 To Round(Sqr(n)/30)Do Begin
  d:=b*30-13;
  Divis(d);Divis(d+2);Divis(d+6);Divis(d+12);
  Divis(d+14);Divis(d+20);Divis(d+24);Divis(d+26); 
 End;
 WriteLn(n); c:=ReadKey;
End.
Instantané mais malheureusement le type INTEGER est limité à +/- 524287
et MOD ne fonctionne pas avec le type REAL et pas de fonction de type FRAC ou INT
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
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 !

"malheureusement le type INTEGER est limité à +/- 524287 "

Pourquoi ?

En même temps, ça me semble beaucoup, sur les Psion 3a, c'est 32 000 et quelques, la limite.
Peut-être la différence d'âge ? le 3a est sorti en 1994. Simple curiosité. :)
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é.
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

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

Message par Gilles59 »

Marge a écrit : 20 oct. 2017 23:38 Bonsoir !

"malheureusement le type INTEGER est limité à +/- 524287 "

Pourquoi ?

En même temps, ça me semble beaucoup, sur les Psion 3a, c'est 32 000 et quelques, la limite.
Peut-être la différence d'âge ? le 3a est sorti en 1994. Simple curiosité. :)
Et bien je ne sais pas, mais à priori je dirai :
Psion 3a : codage des entiers en 32bits
HP Pascal : codage des entiers en 48 bits
Modifié en dernier par Gilles59 le 21 oct. 2017 00:08, modifié 1 fois.
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
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 »

Gilles59 a écrit : 21 oct. 2017 00:06
Marge a écrit : 20 oct. 2017 23:38 Bonsoir !

"malheureusement le type INTEGER est limité à +/- 524287 "

Pourquoi ?

En même temps, ça me semble beaucoup, sur les Psion 3a, c'est 32 000 et quelques, la limite.
Peut-être la différence d'âge ? le 3a est sorti en 1994. Simple curiosité. :)
Et bien je ne sais pas, mais à priori je dirai :
Psion 3a : codage des entier en 32bits
HP Pascal : codage des entiers en 48 bits
Ça me semble costaud, comme explication. :D

Bonne nuit !

Edit : au temps pour moi, le 3a, c'est du 16 bits. C'est le 5 qui passe en 32. Mais ça tient la route...
Modifié en dernier par Marge le 21 oct. 2017 00:23, modifié 1 fois.
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é.
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

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

Message par Gilles59 »

Une petite version HP50g avec la bib GOFERLIST :

Code : Tout sélectionner

« ->  n 
  «
   { 2 3 5 7 11 13 } « n SWAP MOD NOT » Find
   IF DUP NOVAL ≠ THEN KILL END
   DROP
   1 'IP(√(n)/30)' FOR d
    d 30 *
    {-13 -11 -7 -1 +1 7 11 13} ADD
    « n SWAP MOD NOT » Find
    IF DUP NOVAL ≠ THEN KILL END
    DROP
   NEXT
   n
  »
»
71327 : 0.91"
123679 : 0.94"
1000003 : 3.5"
10000019 : 10.9"
31629593 : 20.9"
999999937 : 118 "
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

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

Message par Gilles59 »

Marge a écrit : 21 oct. 2017 00:07Bonne nuit !

Edit : au temps pour moi, le 3a, c'est du 16 bits. C'est le 5 qui passe en 32. Mais ça tient la route...
LE Saturn de la HP50G est en 4bits. Mais il peut travailler en 'agrégeant' des registres (suis une bille en assembleur saturn mais j'ai vu çà.
Bonne nuit ;D
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
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 »

caloubugs a écrit : 31 août 2015 22:16 [...]
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

...PRIMLEX...
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 
Sans rien inventé non plus, le programme dans ma nouvelle acquisition ressemble comme deux gouttes d'eau à celui de caloubugs:

Code : Tout sélectionner

CAT
	MRA1	BASIC	30	12/10/20	23:46
LIST
	10 INPUT N @ T=TIME @ DISP N;PRIM(N);TIME-T;'"'
La fonction PRIM(n) renvoie 0 pour tout entier n premier ou le plus petit facteur de n lorsque celui-ci est un nombre composé.
Mais je n'ai rien inventé, c'est l'instruction PRIM() présente dans la JPC ROM ver E01 enfichée dans le module n°2 de mon HP-71B.

Cette instruction PRIM() a été composée par Olivier ARBEY et Guy TOUBLANC et a fait l'objet des publications suivantes:
JPC 35 (page 21) Juin 1986 - First version of DIVILEX by Guy Toublanc
JPC 38 (page 18) Octobre 1986 - Second version by Guy Toublanc
JPC 48 (page 23) Octobre 1987 - Third version by Guy Toublanc.

Du coup j'obtiens pour les calculs les affichages suivants:

Code : Tout sélectionner

 1231      0       .14 "
 71327     0       .25 "
 123679    337     .25 "
 1000003   0       .55 "
 8043509   2543   1.31 "
 10000019  0      1.65 "
 31629593  0      2.9  "
 998812807 31601 17.64 "
 999999937 0     17.68 "
Il semblerai que cette version de la fonction PRIM() mise au point par Olivier et Guy soit bien plus efficace que la version PRIMLEX des LEXFiles !!


J'ai retrouvé mes notes qui contenaient un programme pour SHARP PC-1211 que je n'ai jamais publié:
C.Ret a écrit : 09 sept. 2015 21:27 Pour le PC-1211, il faudra se 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 vous donne la version sans l'utilisation de l'interface cassette SHARP CE-121, si vous avez la patience d'attendre les 22 min nécessaires à l'initialisation complète des 184 registres contenant les nombres premiers jusqu'à 1097 inclus, alors vous pourrez vérifier la primalité de tous les entiers n jusqu'à 1203409 et en moins de 2' (temps maximum pour tester la divisibilité des 184 nombres premiers) .

Code : Tout sélectionner

1:C=5,D=2,E=6,F=5
2:A=5,C=C+D,D=6-D:GOSUB 4:IF A(A)>BLET E=E+1,A(E)=C
3:GOTO 2

4:A=A+1,B=C/A(A):IF B>A(A)IF B>INT BGOTO 4
5:RETURN

6:"Z"AREAD C:A=3,D=2,E=3:GOSUB 4:BEEP 1:PRINT C,B

1291STEPS 161MEMORIES (soit 133 octets de programme et 187 registres utilisés dont 184 contenant un nombre premier) 
L'initialisation prend plusieurs dizaines de minutes, elle se lance simplement par RUN, le SHARP PC-1211 rempli ses registres avec les premiers nombres premiers. Il s'arrête sur une erreur de dépassement d'indice mémoire à la ligne 2: 4................... ce qui indique qu'il ne peut en mémoriser d'avantage.

Ensuite, on lance chaque test en mode DEF en entrant l'entier n à tester et en pressant [SHIFT][ Z ].
Le résultat est affiché en redonnant l'entier testé n et un facteur b.
Ce facteur b est un entier lorsque le nombre testé est composé. On a alors n = f * bf est le plus petit facteur premier de n.
Ce facteur b est un nombre décimal lorsque le nombre testé est premier.

Si n est trop grand, au bout de 2'13.5" l'analyse s'arrête sur une erreur 4: 4..............
Le dernier facteur premier testé est donné par le registre A(A).

J'obtiens:

Code : Tout sélectionner

RUN                             22'     // l'initialisation fait environ 22 minutes
shift+Z   
         17.         3.4         2.7"   // est premier
       1231. 33.27027027         8.2"   // est premier
      71327. 265.1561338        36.9"   // est premier
     123679.        367.        43.8"   //  123679 = 367 * 337
    1000003. 991.0832507      1'44.6"   // est premier
    1209991.       1103.      1'58.1"   //  1209991 = 1103 * 1097  (c'est le 184° nombre premier mémorisé)
    8043509. 4:  4............1'59.4"   // est trop grand.
On est loin de la vitesse de la lumière !
Plus de 23 minutes pour apprendre que 17 est un nombre premier :(

C'est drôle d'avoir cote à cote deux machines l'une de 1980 et l'autre de 1984 et de voir comment les performances ont été multipliées en si peu d'années.
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 »