2009-06-03 2 views
1

저는 PARI/GP 계산기 (gp)에서 십진법 값을 분수로 바꾸는 자동화 된 방법을 찾고 있습니다. 예를 들어 0.759765625를 389/512로 바꾸고 싶습니다. '759765625/10^9'을 입력하여 수동으로이 작업을 수행 할 수 있음을 알고 있지만, '합리화 (0.759765625)'와 같은 더 쉬운 방법을 원합니다. 맥시마에서 일할거야.Pari/GP에서 소수점을 합리화하는 방법이 있습니까?

직접 처리 할 수없는 경우 소수점 이하 자릿수를 계산하는 기능이 있습니까? 그런 다음 그 결과로 10을 올릴 수 있습니다. (이 함수는 유용한 소수 자릿수를 0으로 시작해야합니다.)

답변

3

pari-2.5에서는 자릿수 인수를 지정하지 않고 bestappr (x)을 직접 사용할 수 있습니다. 그 일의

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

감사합니다. 2.5 년이 지난 것을 보았습니다. 이 대답을 수락했습니다. –

3

bestappr() 함수를 사용하십시오. 주어진 예제에서는 bestappr (0.759765625,10^9)을 사용하십시오. (PARI/GP 메일 링리스트의 답변)

이것은 여전히 ​​소수점 이하 자릿수를 수동으로 지정해야한다는 단점이 있지만이를 극복 할 수 있습니다. bestappr()에 대한 두 번째 매개 변수는 당신이 "합리화"할 필요가있는 가장 긴 십진수보다 큰 10의 매우 큰 힘.

주의 : \ p 명령을 사용하여 bestappr을 호출하기 전에 충분히 높은 정밀도를 설정해야합니다.

0

두 좋은 방법 :

가) 사용 lindep : 그것은 모든 내부적으로 사용 가능한 숫자 사용합니다 중지하여 계속 분수를 사용)

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

B를 할 때마다 큰 부분 quotient가 발생했습니다 (아래에서 제한을 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 
관련 문제