suivant: La fonction dfc2r
monter: Les programmes
précédent: Les programmes
Table des matières
Index
r2dfc(alpha,n) qui transforme un réel alpha en son
développement en fraction continue et qui renvoie deux listes, soit :
-
avec
où les
sont
des entiers, la deuxième liste est
vide et la première liste est le développement en fraction
continue de alpha (les
sont des entiers et donc alpha
est une fraction)
-
, la deuxième liste est vide et
la première liste est le développement en fraction
continue d'ordre n - 1 de alpha suivi de
(le reste est égal à
), où les
sont des entiers et b est un réel
plus grand que 1, soit,
-
avec
où les
sont des entiers, la première liste est le
développement en fraction continue d'ordre p de alpha et
la deuxième liste représente la période de cedéveloppement en fraction
continue (les
sont des entiers et donc alpha est un nombre
quadratique)
.
On remarquera dans le programme ci-dessous que :
remplace
lorsque
alpha=a/b
et que r=alpha-q remplace
lorsque
alpha=a/b
et donc que si r=alpha-q,
etc...
Le problème ici est de pouvoir comparer alpha et q
c'est à dire savoir si r==0 et pour cela on est obligé de
faire les calculs avec beaucoup de décimales c'est à dire d'augmenter
le nombre de digits (on tape par exemple DIGITS:=30).
Il faut bien sûr repérer la période, pour cela on forme la liste
lr des restes successifs. La liste lq des parties entières
successives forme le début du développement en fraction continue.
r2dfc(alpha,n):={
local r,q,lq,lr,p,j;
q:=floor(alpha);
r:=normal(alpha-q);
lq:=[];
lr:=[];
for (j:=1;j<=n;j:=j+1) {
lq:=concat(lq,q);
if (r==0){return (lq,[]);}
p:=member(r,lr);
if (p) {return (lq,mid(lq,p)):}
lr:=concat(lr,r);
alpha:=normal(1/r);
q:=floor(alpha);
r:=normal(alpha-q);
}
return (concat(lq,alpha),[]);
};
On tape :
dfc2r(sqrt(2),1)
On obtient :
([1,sqrt(2)+1],[])
On tape :
dfc2r(sqrt(2),2)
On obtient :
([1,2],[2])
On tape :
dfc2r(pi),6
On obtient :
([3,7,15,1,292,1,(-33102*pi+103993)/(33215*pi-104348)],[])
Remarque
Le premier argument de doit être un nombre exact, car sinon les calculs sont
faits en mode approché et le test r==0 n'est jamais réalisé...
suivant: La fonction dfc2r
monter: Les programmes
précédent: Les programmes
Table des matières
Index
Documentation de giac écrite par Renée De Graeve