Est-il un moyen de Rationaliser une décimale à Pari / GP?
-
09-09-2019 - |
Question
Je suis à la recherche d'un moyen automatisé pour transformer une valeur décimale en une fraction dans la calculatrice PARI / GP (gp). Par exemple, je veux tourner 0,759765625 en 389/512. Je sais que je peux le faire manuellement en tapant « 759765625/10 ^ 9 », mais je voudrais un moyen plus facile, comme « Rationaliser (0,759765625); » fonctionnerait dans Maxima.
Si elle ne peut pas faire directement, peut-être il y a une fonction pour compter le nombre de décimales? Je pourrais soulever 10 au résultat de cette fonction. (La fonction devrait compter premier décimales de 0s pour être utile.)
La solution
Dans pari 2.5, vous pouvez utiliser bestappr (x) directement, sans préciser le supplément nombre de chiffres argument. Il utilisera tous les chiffres disponibles à l'interne:
? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752
Autres conseils
Utilisez la fonction bestappr (); pour l'exemple donné, utiliser bestappr (0.759765625,10 ^ 9). (Réponse avec la permission de la liste de diffusion PARI / GP).
a encore l'inconvénient que le nombre de décimales doit être spécifiée manuellement, mais cela peut être surmonté: le second paramètre à bestappr () peut être une très grande puissance de 10, plus grande que la plus longue décimale que vous aurez jamais besoin de "rationaliser".
Attention: assurez-vous de définir la précision suffisante avant d'appeler bestappr, en utilisant la commande \ p
.Deux grandes façons de le faire:
a) utiliser lindep
:
x=Pi;digits=7;l=lindep([x,1],digits);-l[2]/l[1]
b) l'utilisation continue des fractions en arrêtant chaque fois qu'un grand quotient partiel est rencontré (ci-dessous, je fixe la limite à 1000):
x=Pi;maxquot=1000;p0=0;p1=1;q0=1;q1=0;a=floor(x);while(a<maxquot,p2=a*p1+p0;q2=a*q1+q0;p0=p1;p1=p2;q0=q1;q1=q2;x=1/frac(x);a=floor(x));p1/q1