2009-06-03 27 views
1

我正在尋找一種自動化方法,將PARI/GP計算器(gp)中的十進制值轉換爲分數。例如,我想將0.759765625變成389/512。我知道我可以通過輸入'759765625/10^9'手動執行此操作,但我想要一個更簡單的方法,比如'rationalize(0.759765625);'將在千里馬工作。Pari/GP中有一種合理化十進制的方法嗎?

如果它不能直接做到這一點,也許有一個函數來計算小數位數?然後我可以提高10到該函數的結果。 (該函數必須計算0的前導小數位纔有用。)

回答

3

在pari-2.5中,您可以直接使用bestappr(x),而無需指定額外的 數字位數參數。它會使用所有可用的內部數字:這樣做的

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

謝謝,剛纔看到這個,遲了2.5年 - 我c將此掛鉤至公認的答案。 – 2015-11-26 16:54:29

3

使用bestappr()函數;對於給出的例子,使用bestappr(0.759765625,10^9)。

這仍然有一個缺點,即必須手動指定小數位數,但這可以克服:bestappr()的第二個參數可以作爲一個參數非常大的10次方,大於你需要「合理化」的最長小數。

注意:使用\ p命令確保在調用bestappr之前將精度設置得足夠高。

0

兩個偉大的方式:

一)使用lindep

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

二)停止使用連分數每當一個大的部分遇到商(下面,我把限制爲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 
相關問題