Rappel du code de franck...C.Ret a écrit :Je ne veux pas répondre à la place de franck196569, mais clairement son algorithme est basé sur une décomposition en fractions continues, (les registre H et Ides lignes 1 et 4) fractions continues que l'on détermine pas à pas jusqu'à obtenir une valeur suffisamment proche du réel initial x (cf. test ligne 6).Thierry Loiseau a écrit :Bon. Et comment déduis-tu cela ?
2.5550
Ce qui est malin c'est que la fraction est exprimée à chaque pas sous la forme d'une somme de deux fractions dont on détermine le numérateur (registres A,B et E,F) et le dénominateur par inversions successives de ceux-ci (ligne 5).
Ce qui fait que dès que l'on estime être assez proche du nombre réel initial, il suffit d'afficher la fraction finale (ligne 7)
Je connaissait cet algorithme, mais avec un tableau intermédiaire (qui mémorise les a(i) des fractions continues) construit à partir de X (décomposition), puis une seconde partie effectuait les calcul des numérateur et dénominateur à partir des valeurs du tableau intermédiaire (recomposition).
Le code proposé par franck196569, est plus malin car il combine les deux étapes.
Code : Tout sélectionner
1 CLEAR : INPUT G : H = G : I = INT H : X = G
2 IF ABS (G-INT G)<=1E-9*ABS G LET B=X : E=1 : GOTO 7
3 A=1 : B=I : D=0 : E=1
4 H=1/(H-I) : I=INT H
5 C=B*I+A : A=B : B=C : F=E*I+D : D=E : E=F
6 IF ABS (G-C/F)>1E-9*ABS G THEN 4
7 PRINT STR$ B;"/";STR$E : END




