문제

저는 PARI/GP 계산기(gp)에서 소수 값을 분수로 변환하는 자동화된 방법을 찾고 있습니다.예를 들어 0.759765625를 389/512로 바꾸고 싶습니다.'759765625/10^9'를 입력하여 수동으로 이 작업을 수행할 수 있다는 것을 알고 있지만 'rationalize(0.759765625);'와 같은 더 쉬운 방법을 원합니다.

직접적으로 할 수 없다면 소수점 이하 자릿수를 세는 기능이 있을까요?그런 다음 해당 함수의 결과로 10을 올릴 수 있습니다.(이 함수는 유용하기 위해 선행 소수점 이하 자릿수를 0으로 계산해야 합니다.)

도움이 되었습니까?

해결책

Pari-2.5에서는 추가 수위 인수를 지정하지 않고 Best Pract (x)를 직접 사용할 수 있습니다. 내부적으로 사용 가능한 모든 숫자를 사용합니다.

? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752

다른 팁

bestappr() 함수를 사용하세요.주어진 예에서는 bestappr(0.759765625,10^9)을 사용하세요.(답변은 PARI/GP 메일링 리스트에서 제공됩니다.)

소수 자릿수를 수동으로 지정해야 한다는 단점이 있지만 다음과 같이 극복할 수 있습니다.bestappr()의 두 번째 매개변수는 "합리화"하는 데 필요한 가장 긴 소수점보다 큰 10의 매우 큰 거듭제곱으로 만들 수 있습니다.

주의:\p 명령을 사용하여 bestappr을 호출하기 전에 정밀도를 충분히 높게 설정하십시오.

그것을하는 두 가지 좋은 방법 :

a) 사용 lindep:

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

b) 큰 부분적 지수가 발생할 때마다 정지하여 지속적인 분수를 사용합니다 (아래, 한계를 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top