巴里/ GPで小数を合理化する方法はありますか?
-
09-09-2019 - |
質問
私はPARI / GPの電卓(GP)での画分に10進値をオンにする自動化された方法を探しています。例えば、私は512分の389に0.759765625をオンにしたいです。 「合理化(0.759765625);」私は「9 ^ 10分の759765625」を入力して手動でこれを行うことができます知っているが、私のような簡単な方法を、希望しますマキシマに働くだろう。
それが直接これを行うことができない場合は、多分、小数点以下の桁数をカウントする機能がありますか?それから私は、その関数の結果に10を上げることができます。 (関数は有用であると0のリード小数点以下の桁をカウントする必要があります。)
解決
PARI-2.5では、あなたは余分を指定せずに、直接(x)はbestappr使用することができます 数の桁引数。これは、すべて内部で利用できる数字を使用します。
? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752
他のヒント
bestappr()関数を使用します。所与例えば、(0.759765625,10 ^ 9)bestappr使用。 (PARI / GPメーリングリストの礼儀に回答します。)
これはまだ小数点以下の桁数を手動で指定しなければならないという欠点を持っているが、これは克服することができます。二番目のパラメータは、)(bestapprする10の非常に大きな力にすることができる最長の小数より大きいあなたは意志"合理化" する必要があります。
注意:\のpコマンドを使用して、bestappr呼び出す前に、十分に高い精度を設定してください。
。それをやって二つの偉大な方法:
A)lindep
を使用します:
x=Pi;digits=7;l=lindep([x,1],digits);-l[2]/l[1]
B)大部分商が検出されるたびに停止することによって連分数を使用する(以下、I)を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