next up previous contents index
suivant: Exemples monter: Les programmes précédent: La fonction r2dfc   Table des matières   Index

La fonction dfc2r

On écrit la fonction réciproque de r2dfc qui à partir d'un développement en fraction continue et d'un reste éventuel ou d'un développement en fraction continue et d'une période éventuelle renvoie un réel.
dfc2r(d,t) transforme en un réel, la liste d représente un développement en fraction continue et la liste t représente la période.
On remarquera que lorsque la liste t n'est pas vide il faut déterminer le nombre 0<y<1 qui admet cette liste périodique comme développement en fraction continue et pour ce faire résoudre l'équation :
$ \tt y=(0,t_0,...t_{st-1}+y)$ le reste est alors $ \tt y+d_{s-1}$ (s:=size(d)).
On écrit le programme :
dfc2r(d,t):={
local s,st,alpha,l,ap,k;
s:=size(d);
alpha:=d[s-1];
for (k:=s-2;k>=0;k:=k-1) {alpha:=normal(d[k]+1/alpha);}
if (t==[]) {return normal(alpha);}
st:=size(t);
purge(y);
ap:=t[st-1]+y;
for (k:=st-2;k>=0;k:=k-1) {ap:=normal(t[k]+1/ap);}
l:=solve(y=1/ap,y);
if (l[0]>0){y:=normal(l[0]);}else{y:=normal(l[1]);};
alpha:=d[s-1]+y;
for (k:=s-2;k>=0;k:=k-1) {alpha:=normal(d[k]+1/alpha);}
return(normal(a)lpha);
};
ou avec une écriture plus concise :
dfc2r(d,t):={
local s,st,alpha,l,ap,k;
s:=size(d);
st:=size(t);
if (st==0) 
  {y:=0;} 
   else 
 {purge(y);
  ap:=t[st-1]+y;
  for (k:=st-2;k>=0;k:=k-1) {ap:=normal(t[k]+1/ap);}
  l:=solve(y=1/ap,y);
  if (l[0]>0){y:=normal(l[0]);}else{y:=normal(l[1]);};
  }
alpha:=d[s-1]+y;
for (k:=s-2;k>=0;k:=k-1) {alpha:=normal(d[k]+1/alpha);}
return(normal(alpha));
};


Documentation de giac écrite par Renée De Graeve