πの分数近似



円周率πの値は東京大学 金田研究室が1999年に2061億5843万桁の計算記録を樹立していますが、 古くはπの分数近似値 355/113 を 宗時代の祖冲之(Ze Cheng zhi)が得ているそうです。 最も簡単なπの分数近似 22/7 は US gallon の 231立方インチの元になっています*note1
なにかと便利なので、もうちょいましな多桁の分数近似を求めてみました。

πの分数近似 (π≒3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628…)
上限被除数 a除数 b誤差(a/b/π-1)
16bit以下3551138.49136786583708625840e-8
10進5桁以下99733317463.81881198949430055092e-9
10進6桁以下8337192653812.77421939101155628946e-12
10進7桁以下541935117250337.04890217867358664916e-15
10進8桁以下85563208272356152.73804930887241960781e-16
10進9桁以下657408909209259755-5.44767386326588380711e-18
31bit以下1068966896340262731-9.77236323203935200888e-19
32bit以下36184586751151791169-1.65038166494360663281e-19
10進10桁以下61679504541963319607-2.42761825922838344760e-20
10進12桁以下210533431416701487259-8.32827592510769072009e-23
10進14桁以下89589377689372851718461558-2.45785970095542706416e-27
10進16桁以下61348995254170451952799169684491-1.54785025105017880241e-32
10進18桁以下4300109465910692431368767354671873402.75587618588738719392e-36
64bit以下2646693125139304345842468587426513207-4.49046611523687068218e-39
127bit以下60728338969805745700507212595448411044193304306656095265567072163765127149451.98652948184227162437e-76
128bit以下25683992386148878260790279034883749767981754686931803956266412424933874257924-2.76396581129743574033e-78

オイラーの数も求めてみました。

の分数近似 (≒2.71828182845904523536028747135266249775724709369995…)
上限被除数 a除数 b誤差(a/b/e-1)
8bit以下193711.03119167375784216350e-5
15bit以下2322585442.48206319277341287008e-9
16bit以下49171180891.01774028148239222876e-10
10進6桁以下5668272085244.24477193524942965466e-12
10進7桁以下924269134001969.39365936708327277024e-14
10進8桁以下28245729103910232.26630045186603754982e-16
10進10桁以下848456353312129649-2.21730813031467866914e-19
10進12桁以下563501581931207300647064.28563301202314957246e-24
10進14桁以下46150226651233169777195903915.54377713289347224505e-29
10進16桁以下2124008553358849781379079653017-2.40820008083386219477e-32
10進18桁以下106246577894593683390859317022412418.91254046041767100087e-36
64bit以下57394392148614177312111421691000680031-2.84379499543328650267e-39
128bit以下3289996141675217800985917556406054000112103219420556805047490636736113723601-5.12409357801477027851e-77

ついでに、ln(10) も求めてみました。

ln(10)の分数近似 (ln(10)≒2.30258509299404568401799145468436420760110148862877…)
上限被除数 a除数 b誤差(a/b/ln(10)-1)
8bit以下175762.01885930140768282573e-5
15bit以下123815377-3.63694236969525253020e-9
16bit以下534432321-1.57023376770388504366e-10
10進8桁以下112498394885743-6.88220614857135166216e-16
10進10桁以下17843263997749231092.95609872891646180027e-20
10進12桁以下8294500122923602255633539.64071099020018463581e-25
10進14桁以下5757941472027225006422084233-1.75732289543998383413e-28
10進17桁以下227480160645689987933785108886.20618869283960716155e-32
10進18桁以下6524159382300714512833406418790528282.48418613473633684568e-36
63bit以下70131869857724609873045788408476679291-3.20170789425199490362e-38
64bit以下994894496772745967243207719002431615739.83627881266804634475e-40
127bit以下11391473435995927516300292143099268161049472540540005072595078612933407385387-7.595937959911257199419e-77
128bit以下2393799934286313699844048120568983555031039614102240912879352225813255285945068.480564324700164171770e-78


連分数を使って分数近似を求める calc による分数近似プログラムの例
/* fract : fractional approximation program v1.04 (Feb. 8 2008) 
 * Copyright (c) 2008, Takayuki HOSODA. All rights reserved.
 */

config("display", 20)
config("mode", "real")
config("epsilon", 1e-50)

define fract(x, err)
{
    local a, c, d, e, n, t;
    local i, j;
    local mat m[100];

    c = a = abs(x);
    print "#fractional approximation for", a;
    print "#order\tcoefficients\tnumerator\tdenominator\terror";
    i = 0;
    e = 1;
    do {
        m[i] = floor(c);
        if (m[i] != 0) {
            n = 1;
            d = 0;
            for (j = i; j >= 0; j--){
                t = n;
                n = n * m[j] + d;
                d = t;
            }
            e = abs(a * d / n - 1); 
            print i, "\t", m[i], "\t", n,"\t", d, "\t", e;
        }
        c -= m[i];
        if ((c == 0) || (e < err))
            break;
        c = 1 / c;
    } while (++i < 100);
}

fract(pi(), 1e-20)
quit


Note 1:
ある日、カリフォルニア在住の友人とのワインの話しで

1 gallon (Queen Ann's gallon) って 231 立方インチなんだけど、 何故 3 × 7 × 11 なんて互いに素な素数の積なんだろう?

と調べてみると、1 gallon = 直径7" × 高さ6" と決まっていたのを アン女王の時代に πの分数近似 22/7 で置き換えたかららしい。
近似で増える分は天使の取り分にしておこう :-)

π r2 ≈ 22/7 × (7/2)2 × 6 = 231

なんか幸せな数字だ。中国人剰余定理を使って各辺の余りで 231 までの数が全て 表せるじゃあないか。いや、液体は積めないか…
Anyway ワインは幸せだね ;-)

SEE ALSO:
グレゴリオ歴とバイナリ歴
算術幾何平均による円周率πの計算公式
HP-32sII 用分数近似プログラム
HP-42S 用分数近似プログラム

© 2000 Takayuki HOSODA.
www.finetune.co.jp [Mail]