Petit programme permettant de convertir un nombre décimal en fraction.
>> fr(1/3+2.5)
17 / 6
>> fr(1.71428571)
12 / 7
Attention cependant, si dans votre calcul il y avait des nombres irrationnels (racine carrée, pi, etc), le programme donnera en réponse une fraction qui ne sera qu’une approximation du vrai résultat.
>> fr(3.14159265)
355 / 113
En effet 355/113 vaut environ 3.1415929203…
def fr(x): p,d,q,z=0,0,1,x while abs(p/q-x)>1e-6: z=1/(z%1) d,q=q,q*int(z)+d p=round(x*q,0) return "{} / {}".format(int(p),q)
Le fichier à transférer sur votre machine ou alors tapez le programme ci-dessous :
Si vous savez que le dénominateur n’est pas très grand (< 106), une solution très simple est de tester les dénominateurs les uns après les autres (1, puis 2, puis 3 etc.), le programme est alors extrêmement court :
def fr(x, q = 1): while abs(round(x*q)/q-x)>1e-6: q = q+1 return "{} / {}".format(round(x*q),q)
# Version de la video def fr(x): p,q,u,v,z = int(x),1,1,0,x while abs(p/q-x)>1e-6: z = 1/(z%1) k,l = int(z)*p+u,int(z)*q+v u,v,p,q = p,q,k,l return "{} / {}".format(p,q)