2009-06-03 7 views
1

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 transformer 0.759765625 en 389/512. Je sais que je peux le faire manuellement en tapant '759765625/10^9', mais je voudrais un moyen plus simple, comme 'rationaliser (0.759765625);' travaillerait à Maxima.Existe-t-il un moyen de rationaliser une décimale dans Pari/GP?

S'il ne peut pas le faire directement, peut-être qu'il y a une fonction pour compter le nombre de décimales? Ensuite, je pourrais élever 10 au résultat de cette fonction. (La fonction doit compter les décimales de 0 pour être utile.)

Répondre

3

En pari-2.5, vous pouvez utiliser bestappr (x) directement, sans spécifier l'argument supplémentaire de nombre-de-chiffres. Il utilisera tous les chiffres disponibles à l'interne:

? bestappr(Pi) 
%1 = 17004845848539028973023/5412810546621363616752 
+0

Merci, vient de le voir, 2,5 ans de retard - I c pendu cela à la réponse acceptée. –

3

Utilisez la fonction bestappr(); Pour l'exemple donné, utilisez bestappr (0.759765625,10^9). Cela a toujours l'inconvénient que le nombre de chiffres décimaux doit être spécifié manuellement, mais cela peut être surmonté: le deuxième paramètre à bestappr() peut être fait un très grande puissance de 10, plus grande que la plus longue décimale que vous aurez jamais besoin de "rationaliser".

Attention: veillez à définir une précision suffisamment élevée avant d'appeler la fonction bestappr, en utilisant la commande \ p.

0

Deux façons de le faire:

a) utiliser lindep:

x=Pi;digits=7;l=lindep([x,1],digits);-l[2]/l[1] 

b) utiliser les fractions continues en arrêtant chaque fois qu'une grande partie quotient est rencontré (ci-dessous, j'ai fixé 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