Home |
Logithèque |
CC40
Calcul de l'inverse d'un nombre en précision "infinie"
Code
L=19:INPUT "nombre=";X$:P=0:R$="1."
20 CALL POW(P,X$,L,Y$):IF SEG$(Y$,1,1)="." THEN X$=Y$:CALL POW(P,R$,L,R$):GOTO 20
PRINT P:P=P+1:IF P<=L THEN 20 ELSE PRINT "inverse=";R$:PAUSE:END
!--------------------
SUB POW(P,G$,L,B$):A$=G$
V=POS(A$,".",1):IF V=0 THEN V=1:GOTO 80
A$=SEG$(A$,1,V-1)&SEG$(A$,V+1,300)
80 D$=RPT$("0",P):C$=D$&A$:A$=A$&D$:B$="":W=0
A$=SEG$(A$,1,L+V+3):C$=SEG$(C$,1,L+V+3)
100 IF LEN(A$)<=9 THEN 140
U=VAL(SEG$(A$,LEN(A$)-8,9))+VAL(SEG$(C$,LEN(C$)-8,9))+W
A$=SEG$(A$,1,LEN(A$)-9):C$=SEG$(C$,1,LEN(C$)-9):W=INT(U/1.E+09):B$=RPT$("0",9-LEN(D$))&D$&B$:GOTO 100
D$=STR$(U-W*1.E+09):B$=RPT$("0",9-LEN(D$))&D$&B$:GOTO 100
140 D$=STR$(VAL(A$)+VAL(C$)+W):W=LEN(D$)>LEN(A$):B$=D$&B$
B$=SEG$(B$,1,V-1-W)&"."&SEG$(B$,V-W,L+4):SUBEND
Mode d'emploi
Lancer le programme. A la demande "nombre=" entrer le nombre avec virgule. Si on omet la virgule, le programme la place automatiquement au tout début. Les nombres négatifs sont interdits, zéro est déconseillé (!).
Mathématiques à l'oeuvre
Il s'agit simplement d'une division en multi-précision.
Fonctionnement du programme
L'originalité est d'utiliser des chaînes de caractères pour stocker les chiffres.