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.