Multiplication grands nombres

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

Modérateur : Politburo

Répondre
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1318
Inscription : 21 août 2016 19:04

Multiplication grands nombres

Message par Ben » 23 sept. 2016 16:23

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 de l’utilisateur
phm
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 786
Inscription : 08 avr. 2016 18:36
Localisation : Est Parisien

Re: Multiplication grands nombres

Message par phm » 23 sept. 2016 18:03

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 : 2061
Inscription : 30 mai 2005 09:48
Localisation : Toulouse
Contact :

Re: Multiplication grands nombres

Message par francoisp31 » 23 sept. 2016 19:06

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

:ugeek:

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6460
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Multiplication grands nombres

Message par gege » 23 sept. 2016 21:40

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 : 1318
Inscription : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben » 24 sept. 2016 10:40

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 : 1318
Inscription : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben » 14 nov. 2016 16:53

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 : 1595
Inscription : 13 mars 2006 16:39
Contact :

Re: Multiplication grands nombres

Message par remy » 14 nov. 2016 17:07

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

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1318
Inscription : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben » 14 nov. 2016 17:25

Euh...oui, mais c'est moins marrant ça!

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1595
Inscription : 13 mars 2006 16:39
Contact :

Re: Multiplication grands nombres

Message par remy » 14 nov. 2016 17:28

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

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1318
Inscription : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben » 14 nov. 2016 17:30

Puis, un PC-1500 ou un Commodore 128 ne savent pas le faire ;-)

Avatar de l’utilisateur
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 85
Inscription : 05 nov. 2011 13:45
Localisation : Alpes de Haute Provence
Contact :

Re: Multiplication grands nombres

Message par spacemax » 18 nov. 2016 22:42

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 : 1318
Inscription : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben » 19 nov. 2016 17:03

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 : 1318
Inscription : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben » 02 juin 2018 20:25

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 : 1318
Inscription : 21 août 2016 19:04

Re: Multiplication grands nombres

Message par Ben » 09 juil. 2018 17:42

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 de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6460
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Multiplication grands nombres

Message par gege » 09 juil. 2018 19:57

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

Répondre

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