Multiplication grands nombres
Modérateur : Politburo
Multiplication grands nombres
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
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
- phm
- Fonctionne à 2400 bauds
- Messages : 1364
- Enregistré le : 08 avr. 2016 18:36
- Localisation : Est Parisien
Re: Multiplication grands nombres
un rien l'amuse, le bougre ...
faut essayer en binaire, c'est plus long
faut essayer en binaire, c'est plus long
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
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
-
- Fonctionne à 2400 bauds
- Messages : 2002
- Enregistré le : 30 mai 2005 09:48
- Localisation : Toulouse
- Contact :
- gege
- Fonctionne à 14400 bauds
- Messages : 7147
- Enregistré le : 31 janv. 2008 14:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Multiplication grands nombres
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.
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.
Re: Multiplication grands nombres
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
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
Re: Multiplication grands nombres
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
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
-
- Fonctionne à 2400 bauds
- Messages : 2221
- Enregistré le : 13 mars 2006 15:39
- Localisation : Issy
- Contact :
Re: Multiplication grands nombres
Il fait ça en natif le bougreBen 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
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
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Re: Multiplication grands nombres
Euh...oui, mais c'est moins marrant ça!
-
- Fonctionne à 2400 bauds
- Messages : 2221
- Enregistré le : 13 mars 2006 15:39
- Localisation : Issy
- Contact :
Re: Multiplication grands nombres
C'est pas fauxBen a écrit :Euh...oui, mais c'est moins marrant ça!
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
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Re: Multiplication grands nombres
Puis, un PC-1500 ou un Commodore 128 ne savent pas le faire
- spacemax
- Fonctionne à 300 bauds
- Messages : 86
- Enregistré le : 05 nov. 2011 12:45
- Localisation : Alpes de Haute Provence
Re: Multiplication grands nombres
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.
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
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
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
Re: Multiplication grands nombres
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
Re: Multiplication grands nombres
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).
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
Re: Multiplication grands nombres
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
- gege
- Fonctionne à 14400 bauds
- Messages : 7147
- Enregistré le : 31 janv. 2008 14:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Multiplication grands nombres
Bonjour,
Je me trompe ou ta division n'est pas en multiprécision ?
Bien joué quand même.
G.E.
Je me trompe ou ta division n'est pas en multiprécision ?
Bien joué quand même.
G.E.