Multiplication grands nombres

Les derniers trucs auxquels vous avez joué, les derniers ordinateurs que vous avez bidouillés.

Modérateur : Politburo

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Multiplication grands nombres

Message par Ben »

Bonjour,

Hier, j'ai passé quelques heures à donner la possibilité à mon PC-E500 de multiplier de grands nombres, style 1234567890*45 :-)

Il me reste encore 1234567890*1234567890
Puis après ça, pouvoir mélanger les bases &b45*12354567890

Ben
Avatar du membre
phm
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1361
Enregistré le : 08 avr. 2016 18:36
Localisation : Est Parisien

Re: Multiplication grands nombres

Message par phm »

un rien l'amuse, le bougre ... :geek:
faut essayer en binaire, c'est plus long :mrgreen:
HEWLETT-PACKARD : The best
CANON
X-07 X-730 X-711 XR-100 XM-101 XP-110F XP-120F XP-130F XP-140

AMSTRAD CPC-464 CPC-6128 ATARI STF DAI Indata
francoisp31
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2002
Enregistré le : 30 mai 2005 09:48
Localisation : Toulouse
Contact :

Re: Multiplication grands nombres

Message par francoisp31 »

-----------
ssh debile@stupide.local "docker run -it docker/cowsay \"fortune | cowsay\" "

:ugeek:
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Multiplication grands nombres

Message par gege »

Bonjour,
Bien mais c'est une route sans fin, après il y aura la division, la racine carrée, le logarithme, exponentielle, pi, trigonométrie, hyperbolique, fonctions spéciales...
Argh !
Bonne route !
G.E.
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben »

Commençons petit, juste les 4 opérations :-)

Mais je me demande si je n'aurais pas plus facile de le faire avec une pile à la RPN, histoire de ne pas devoir gérer les parenthèses
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben »

Bonjour,

Ce petit programme avance lentement. Ah! Ce manque de temps!

Par contre, je bute un peu sur la division. Pour le moment, je divise en faisant des soustractions. Mais 1234567890/45, ça fait quand même 27434842 soustractions! C'est un peu trop pour le petit PC-E500.

Auriez-vous une piste?

Ben
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Multiplication grands nombres

Message par remy »

Ben a écrit :Bonjour,

Hier, j'ai passé quelques heures à donner la possibilité à mon PC-E500 de multiplier de grands nombres, style 1234567890*45 :-)

Il me reste encore 1234567890*1234567890
Puis après ça, pouvoir mélanger les bases &b45*12354567890

Ben
Il fait ça en natif le bougre :-)

Image
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben »

Euh...oui, mais c'est moins marrant ça!
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Multiplication grands nombres

Message par remy »

Ben a écrit :Euh...oui, mais c'est moins marrant ça!
C'est pas faux :lol:
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben »

Puis, un PC-1500 ou un Commodore 128 ne savent pas le faire ;-)
Avatar du membre
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 86
Enregistré le : 05 nov. 2011 12:45
Localisation : Alpes de Haute Provence

Re: Multiplication grands nombres

Message par spacemax »

Hi,

Intéressant. J'avais écris un bout de code en basic permettant de multiplier facon genre humain...J'avais commencer ça dans le but de faire une calculatrice sans notation scientifique et pour garder la précision...mais j'ai laissé tomber faute de temps.

Code : Tout sélectionner

REM Start of BASIC! Program
REM Calculette humaine
deb:
dim r$[100]

input "n:",n$
input "m:",m$
k=1 :lm=len(m$):ln=len(n$)
print n$;"x";m$
for i=lm to 1 step -1
   ret=0:sr$=""
   for j=ln to 1 step -1
      v1=val(mid$(n$,j,1))
      v2=val(mid$(m$,i,1))
      r=v1*v2+ret
      ret=floor(r/10)
      !--print v1;"x";v2;" ";r
      r=r-ret*10
      !--print ret;" ";r
      sr$=int$(r)+sr$
      !--print sr$
   next j
   sr$=int$(ret)+sr$
   print sr$
   r$[k]=sr$
   k=k+1
next i 

REM Calcul du résultat

lntot=ln+lm:ln=len(r$[1])
ret=0

for i=ln to (ln-lntot) step -1
   !--print "i";i
   !--print
   if i>0 then
      v=val(mid$(r$[1],i,1))
   else 
      v=0
   endif
   !--v=v+ret
   !--print v;"+";
   v=v+ret
   for j=2 to lm
      k=i+j-1
      if k>len(r$[j]) | k<1 then
         v2=0
      else 
         v2=val(mid$(r$[j],k,1))
         !--print v2;"+";
         v=v+v2
      endif
   next j
   ret=floor(v/10)
   v=v-ret*10
   !--print v;" ";ret
   r$[lm+1]=int$(v)+r$[lm+1]
next i
dialog.message "Résultat",r$[lm+1],ok,"Ok"
!--debug.on
!--debug.dump.array r$[]
undim n$[],m$[],r$[]
goto deb

Image
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben »

En fait, c'est ce que je fais aussi, pour l'addition, la soustraction ou la multiplication. Il ne me reste plus que la division
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben »

Après quelques heures sur un PC-3, voici un premier jet. C'est du BASIC tout à fait standard, adaptable à n'importe quelle machine qui supporte la conversion numérique<->caractères.

Il reste tout de même pas mal de boulot, mais le principal est là.

J'ai adapté le programme pour Hector (je ne sais pas pourquoi, j'aime bien cette machine).

Code : Tout sélectionner

10 CLEAR:DIM N$(1)*50:DIM T(50)
20 INPUT "NBR1=";N$(0):INPUT "NBR2=";N$(1):INPUT "OPER=";O$
25 IF O$="/" GOSUB 500:GOTO 98
30 IF LEN(N$(0))>LEN(N$(1)) LET l=LEN(N$(0)):GOTO 40
35 L=LEN(N$(1))
36 IF L<A LET W=5-L:L=L+W:GOTO 60
40 W=5-(L-INT(L/5)*5):L=L+W
60 FOR I=LEN(N$(0))+1 TO L:N$(0)="0"+N$(0):NEXT I
70 FOR I=LEN(N$(1))+1 TO L:N$(1)="0"+N$(1):NEXT I
80 IF O$="+" GOSUB 100:GOTO 90
81 IF O$="-" GOSUB 200:GOTO 90
82 IF O$="*" GOSUB 300
90 FOR I=B TO 1 STEP -1: PRINT T(I):NEXT I
98 END
99 REM ADDITION
100 R=0:B=0
110 FOR I=L-4 TO 1 STEP -5
120 N=VAL(MID$(N$(0),I,5)):M=VAL(MID$(N$(1),I,5))
130 A=N+M+R:R=0
140 IF A<99999 THEN 160
150 R=INT(A/100000):A=A-R*100000
160 B=B+1:T(B)=A
170 NEXT I
190 RETURN
199 REM SOUSTRACTION
200 R=0:B=0
210 FOR I=L-4 TO 1 STEP -5
220 N=VAL(MID$(N$(0),I,5)):M=VAL(MID$(N$(1),I,5))+R:R=0
230 IF M>N LET N=N+100000:R=1
240 A=N-M
250 B=B+1:T(B)=A
260 NEXT I
270 RETURN
299 REM MULTIPLICATION
300 R=0:B=0:C=0
310 FOR I=L-4 TO 1 STEP -5
320 M=VAL(MID$(N$(1),I,5))
330 FOR J=L-4 TO 1 STEP -5
340 N=VAL(MID$(N$(0),J,5))
350 A=N*M+R:R=0
360 IF A<99999 THEN 380
370 R=INT(A/100000):A=A-R*100000
380 B=B+1:T(B)=T(B)+A
385 IF T(B)>99999 LET W=INT(T(B)/100000):T(B)=T(B)-W*100000:T(B+1)=T(B+1)+W
390 NEXT J
395 IF R>0 LET B=B+1:T(B)=T(B)+R:R=0
400 C=C+1:W=B:B=C
410 NEXT I
415 B=W
420 RETURN
449 REM DIVISION
500 M=VAL(N$(1)):R=0:L=LEN(N$(0)):N$(1)=""
510 FOR I=1 TO L
520 N=VAL(MID$(N$(0)),I,1))+R*10:A=INT(N/M)
530 N$(1)=N$(1)+STR$(A)
540 R=A*M:R=N-R
550 NEXT I
560 PRINT "QUOT:";N$(1):PRINT "RESTE=";R
570 IF R=0 THEN 630
580 N$(1)=N$(1)+","
585 FOR I=1 TO 20
590 R=R*10:A=INT(R/M):C=A*M:R=R-C
600 N$(1)=N$(1)+STR$(A)
610 IF R=0 LET I=20
615 NEXT I
620 PRINT N$(1)
630 RETURN
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben »

Le même programme, mais avec quelques bugs en moins et une meilleure façon de présenter les résultats:

Code : Tout sélectionner

10 CLEAR:DIM N$(1)*50:DIM T(50)
20 INPUT "NBR1=";N$(0):INPUT "NBR2=";N$(1):INPUT "OPER=";O$
25 IF O$="/" GOSUB 500:GOTO 98
30 IF LEN(N$(0))>LEN(N$(1)) LET L=LEN(N$(0)):GOTO 36
35 L=LEN(N$(1))
36 IF L<5 LET W=5-L:L=L+W:GOTO 60
37 A=L-INT(L/5)*5
38 IF A=0 THEN 60
40 W=5-A:L=L+W
60 IF LEN(N$(0))<L LET N$(0)="0"+N$(0):GOTO 60
70 IF LEN(N$(1))<L LET N$(1)="0"+N$(1):GOTO 70
80 IF O$="+" GOSUB 100:GOTO 95
81 IF O$="-" GOSUB 200:GOTO 95
82 IF O$="*" GOSUB 300
95 GOSUB 650
98 END
99 REM ADDITION
100 R=0:B=0
110 FOR I=L-4 TO 1 STEP -5
120 N=VAL(MID$(N$(0),I,5)):M=VAL(MID$(N$(1),I,5))
130 A=N+M+R:R=0
140 IF A<99999 THEN 160
150 R=INT(A/100000):A=A-R*100000
160 B=B+1:T(B)=A
170 NEXT I
190 RETURN
199 REM SOUSTRACTION
200 R=0:B=0
210 FOR I=L-4 TO 1 STEP -5
220 N=VAL(MID$(N$(0),I,5)):M=VAL(MID$(N$(1),I,5))+R:R=0
230 IF M>N LET N=N+100000:R=1
240 A=N-M
250 B=B+1:T(B)=A
260 NEXT I
270 RETURN
299 REM MULTIPLICATION
300 R=0:B=0:C=0
310 FOR I=L-4 TO 1 STEP -5
320 M=VAL(MID$(N$(1),I,5))
330 FOR J=L-4 TO 1 STEP -5
340 N=VAL(MID$(N$(0),J,5))
350 A=N*M+R:R=0
360 IF A<99999 THEN 380
370 R=INT(A/100000):A=A-R*100000
380 B=B+1:T(B)=T(B)+A
385 IF T(B)>99999 LET W=INT(T(B)/100000):T(B)=T(B)-W*100000:T(B+1)=T(B+1)+W
390 NEXT J
395 IF R>0 LET B=B+1:T(B)=T(B)+R:R=0
400 C=C+1:W=B:B=C
410 NEXT I
415 B=W
420 RETURN
449 REM DIVISION
500 M=VAL(N$(1)):R=0:L=LEN(N$(0)):N$(1)=""
510 FOR I=1 TO L
520 N=VAL(MID$(N$(0),I,1))+R*10:A=INT(N/M)
530 N$(1)=N$(1)+STR$(A)
540 R=A*M:R=N-R
550 NEXT I
560 PRINT "QUOT:";N$(1):PRINT "RESTE=";R
570 IF R=0 THEN 630
580 N$(1)=N$(1)+","
585 FOR I=1 TO 20
590 R=R*10:A=INT(R/M):C=A*M:R=R-C
600 N$(1)=N$(1)+STR$(A)
610 IF R=0 LET I=20
615 NEXT I
620 PRINT N$(1)
630 RETURN
650 IF T(B)=0 LET B=B-1:GOTO 650
653 PRINT STR$(T(B))
654 IF B=1 THEN 680
655 FOR I=B-1 TO 1 STEP -1
656 W$=STR$(T(I)):L=LEN(W$)
660 IF L=5 THEN 670
665 FOR J=1 TO 5-L:W$="0"+W$:NEXT J
670 PRINT W$
675 NEXT I
680 PRINT "STAT=";5*(B-1)+LEN(STR$(T(B)))
690 RETURN
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Multiplication grands nombres

Message par gege »

Bonjour,
Je me trompe ou ta division n'est pas en multiprécision ?
Bien joué quand même.
G.E.
Répondre

Retourner vers « A quoi t'as joué hier ? »