1

PARI/GP 電卓 (gp) で小数値を分数に自動変換する方法を探しています。たとえば、0.759765625 を 389/512 に変換したいとします。「759765625/10^9」と入力して手動でこれを実行できることはわかっていますが、「rationalize(0.759765625);」のような簡単な方法が必要です。マキシマで動作します。

これを直接できない場合は、小数点以下の桁数を数える関数があるのではないでしょうか? 次に、その関数の結果に 10 を上げることができます。(この関数を有効にするには、先頭の 0 の小数点以下の桁数をカウントする必要があります。)

4

3 に答える 3

3

bestappr() 関数を使用します。この例では、bestappr(0.759765625,10^9) を使用します。(回答は PARI/GP メーリング リストの好意によるものです。)

これには、10 進数の桁数を手動で指定しなければならないという欠点がありますが、これは克服できます。合理化」。

注意: bestappr を呼び出す前に、\p コマンドを使用して精度を十分に高く設定してください。

于 2009-06-05T01:30:59.070 に答える
3

pari-2.5 では、追加の桁数引数を指定せずに、直接 bestappr(x) を使用できます。内部で利用可能なすべての数字を使用します。

? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752
于 2013-04-05T15:28:36.327 に答える
0

それを行う2つの優れた方法:

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
于 2015-11-08T11:25:42.683 に答える