Pregunta

Estoy buscando una manera automatizada para convertir un valor decimal en una fracción de la calculadora PARI / GP (GP). Por ejemplo, yo quiero convertir en 0,759765625 389/512. Sé que puedo hacer esto manualmente escribiendo en '759765625/10 ^ 9', pero me gustaría una manera más fácil, al igual que 'racionalizar (0,759765625);' trabajaría en Maxima.

Si no puede hacerlo directamente, tal vez hay una función para contar el número de decimales? Entonces podría aumentar a 10 el resultado de esa función. (La función tendría que contar que lleva cifras decimales de 0s para ser útil.)

¿Fue útil?

Solución

En Pari-2.5, puede utilizar bestappr (x) directamente, sin especificar el extra argumento de número de dígitos. Se va a utilizar todos los dígitos disponibles internamente:

? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752

Otros consejos

Utilice la bestappr () función; para el ejemplo dado, utilizar bestappr (0.759765625,10 ^ 9). (Respuesta cortesía de la lista de correo PARI / GP).

Esto todavía tiene la desventaja de que el número de dígitos decimales se debe especificar de forma manual, pero esto se puede superar: el segundo parámetro a bestappr () se puede hacer una gran potencia de 10, más grande que el decimal más larga que jamás la necesidad de "racionalizar".

Precaución: asegúrese de ajustar la precisión suficientemente alta antes de llamar bestappr, usando el comando \ p

.

Dos grandes maneras de hacerlo:

a) utilizar lindep:

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

b) utilizar fracciones continuas al detener cada vez que se encuentra un cociente grande parcial (por debajo, I fijó el límite a 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top