もっと円周率に近い分数が欲しい

https://qiita.com/scivola/items/d4a710cd12d83a2fc15a
を見て、もっと円周率に近い分数が欲しくなった。使い道ないけど。


# 円周率
`Math::PI` は所詮 倍精度浮動小数点数。真の円周率から $1.2×10^{-16}$ ほど乖離している。

# 真の円周率の代用品をつくる

真の円周率はコンピュータで表現できないので、とりあえず過剰に真の値に近い円周率を出しておく。
数表から引いて `3.1415略r` ととしても良かったんだけど、せっかくなので漸化式で求めておく。

どれでも良かったんだけど、 https://bellard.org/pi/pi_bin.pdf にある (2) の式を使った。こんなやつ。

```math
\pi=\sum_{n=0}^{∞}(\frac{1}{16^{n}}(
\frac{4}{8n+1}
-\frac{2}{8n+4}
-\frac{1}{8n+5}
-\frac{1}{8n+6}
))
```

で。

できた値を `pi.rationalize((1e-20).to_r)` とかすればその精度の有理数が得られる。

# ソースコード

というわけで、こんなの書いた。

```ruby:ruby2.6
def fb(n)
  # formula(2) in https://bellard.org/pi/pi_bin.pdf
  n = n.to_r
  [
    4r/(8r*n+1),
    -2r/(8r*n+4),
    -1r/(8r*n+5),
    -1r/(8r*n+6),
  ].sum * 1r/(16r**n)
end

def pi(n)
  (0..n).sum{|e| fb(e) }
end

PI = pi(1000)

puts( "                                    value      delta  value-Math::PI" )
puts( "-----------------------------------------  ---------  ---------" )
(1..500).map{ |e|
  PI.rationalize((0.5**(e/4.0)).to_r)
}.uniq.each do |pi|
  real_delta = (pi-PI).to_f
  delta_d = (pi-Math::PI.to_r).to_f
  s = "%d / %d" % [ pi.numerator, pi.denominator ]
  puts( "%41s  %+.2e  %+.2e" % [ s, real_delta, delta_d ] )
end
```

実のところ、 `PI = pi(1000)` は大いに過剰。 500 で十分。

出力はこんな感じ

```text
                                    value      delta  value-Math::PI
-----------------------------------------  ---------  ---------
                                    3 / 1  -1.42e-01  -1.42e-01
                                   13 / 4  +1.08e-01  +1.08e-01
                                   16 / 5  +5.84e-02  +5.84e-02
                                   19 / 6  +2.51e-02  +2.51e-02
                                   22 / 7  +1.26e-03  +1.26e-03
                                 201 / 64  -9.68e-04  -9.68e-04
                                 223 / 71  -7.48e-04  -7.48e-04
                                 245 / 78  -5.67e-04  -5.67e-04
                                 267 / 85  -4.16e-04  -4.16e-04
                                 289 / 92  -2.88e-04  -2.88e-04
                                 311 / 99  -1.79e-04  -1.79e-04
                                333 / 106  -8.32e-05  -8.32e-05
                                355 / 113  +2.67e-07  +2.67e-07
                            55358 / 17621  -2.35e-07  -2.35e-07
                            59618 / 18977  -2.00e-07  -2.00e-07
                            63878 / 20333  -1.68e-07  -1.68e-07
                            68138 / 21689  -1.41e-07  -1.41e-07
                            72043 / 22932  -1.19e-07  -1.19e-07
                            75948 / 24175  -9.93e-08  -9.93e-08
                            79498 / 25305  -8.30e-08  -8.30e-08
                            82693 / 26322  -6.94e-08  -6.94e-08
                            85533 / 27226  -5.83e-08  -5.83e-08
                            88018 / 28017  -4.91e-08  -4.91e-08
                            90148 / 28695  -4.16e-08  -4.16e-08
                            92278 / 29373  -3.45e-08  -3.45e-08
                            94053 / 29938  -2.88e-08  -2.88e-08
                            95473 / 30390  -2.44e-08  -2.44e-08
                            96893 / 30842  -2.02e-08  -2.02e-08
                            97958 / 31181  -1.70e-08  -1.70e-08
                            99023 / 31520  -1.40e-08  -1.40e-08
                            99733 / 31746  -1.20e-08  -1.20e-08
                           100443 / 31972  -1.00e-08  -1.00e-08
                           101153 / 32198  -8.08e-09  -8.08e-09
                           101508 / 32311  -7.12e-09  -7.12e-09
                           101863 / 32424  -6.17e-09  -6.17e-09
                           102218 / 32537  -5.22e-09  -5.22e-09
                           102573 / 32650  -4.28e-09  -4.28e-09
                           102928 / 32763  -3.34e-09  -3.34e-09
                           103283 / 32876  -2.42e-09  -2.42e-09
                           103638 / 32989  -1.49e-09  -1.49e-09
                           103993 / 33102  -5.78e-10  -5.78e-10
                           104348 / 33215  +3.32e-10  +3.32e-10
                           208341 / 66317  -1.22e-10  -1.22e-10
                           312689 / 99532  +2.91e-11  +2.91e-11
                          833719 / 265381  -8.72e-12  -8.72e-12
                         1146408 / 364913  +1.61e-12  +1.61e-12
                         3126535 / 995207  -1.14e-12  -1.14e-12
                        4272943 / 1360120  -4.04e-13  -4.04e-13
                        5419351 / 1725033  +2.21e-14  +2.23e-14
                      47627751 / 15160384  -1.61e-14  -1.60e-14
                      53047102 / 16885417  -1.22e-14  -1.21e-14
                      58466453 / 18610450  -9.00e-15  -8.88e-15
                      63885804 / 20335483  -6.36e-15  -6.24e-15
                      69305155 / 22060516  -4.13e-15  -4.01e-15
                      74724506 / 23785549  -2.23e-15  -2.10e-15
                      80143857 / 25510582  -5.79e-16  -4.57e-16
                     165707065 / 52746197  +1.64e-16  +2.87e-16
                     245850922 / 78256779  -7.82e-17  +4.43e-17
                    411557987 / 131002976  +1.94e-17  +1.42e-16
                   1068966896 / 340262731  -3.07e-18  +1.19e-16
                   2549491779 / 811528438  +5.51e-19  +1.23e-16
                  6167950454 / 1963319607  -7.63e-20  +1.22e-16
                 14885392687 / 4738167652  +3.12e-20  +1.22e-16
                 21053343141 / 6701487259  -2.62e-22  +1.22e-16
              920179147750 / 292902119789  +2.48e-22  +1.22e-16
             1004392520314 / 319708068825  +2.05e-22  +1.22e-16
             1067552549737 / 339812530602  +1.77e-22  +1.22e-16
             1151765922301 / 366618479638  +1.45e-22  +1.22e-16
             1214925951724 / 386722941415  +1.24e-22  +1.22e-16
             1278085981147 / 406827403192  +1.05e-22  +1.22e-16
             1341246010570 / 426931864969  +8.79e-23  +1.22e-16
             1404406039993 / 447036326746  +7.22e-23  +1.22e-16
             1446512726275 / 460439301264  +6.24e-23  +1.22e-16
             1509672755698 / 480543763041  +4.89e-23  +1.22e-16
             1551779441980 / 493946737559  +4.05e-23  +1.22e-16
             1572832785121 / 500648224818  +3.64e-23  +1.22e-16
             1614939471403 / 514051199336  +2.86e-23  +1.22e-16
             1635992814544 / 520752686595  +2.49e-23  +1.22e-16
             1657046157685 / 527454173854  +2.13e-23  +1.22e-16
             1678099500826 / 534155661113  +1.77e-23  +1.22e-16
             1699152843967 / 540857148372  +1.43e-23  +1.22e-16
             1720206187108 / 547558635631  +1.09e-23  +1.22e-16
             1741259530249 / 554260122890  +7.58e-24  +1.22e-16
             1762312873390 / 560961610149  +4.37e-24  +1.22e-16
             1783366216531 / 567663097408  +1.23e-24  +1.22e-16
            3587785776203 / 1142027682075  -3.15e-25  +1.22e-16
            5371151992734 / 1709690779483  +1.97e-25  +1.22e-16
            8958937768937 / 2851718461558  -7.72e-27  +1.22e-16
          77042654144230 / 24523438471947  +6.58e-27  +1.22e-16
          86001591913167 / 27375156933505  +5.09e-27  +1.22e-16
          94960529682104 / 30226875395063  +3.88e-27  +1.22e-16
         103919467451041 / 33078593856621  +2.88e-27  +1.22e-16
         112878405219978 / 35930312318179  +2.04e-27  +1.22e-16
         121837342988915 / 38782030779737  +1.32e-27  +1.22e-16
         130796280757852 / 41633749241295  +7.01e-28  +1.22e-16
         139755218526789 / 44485467702853  +1.61e-28  +1.22e-16
         288469374822515 / 91822653867264  -8.37e-29  +1.22e-16
        428224593349304 / 136308121570117  -3.81e-30  +1.22e-16
       3137327371971917 / 998642318693672  +3.54e-30  +1.22e-16
      3565551965321221 / 1134950440263789  +2.66e-30  +1.22e-16
      3993776558670525 / 1271258561833906  +1.97e-30  +1.22e-16
      4422001152019829 / 1407566683404023  +1.41e-30  +1.22e-16
      4850225745369133 / 1543874804974140  +9.46e-31  +1.22e-16
      5278450338718437 / 1680182926544257  +5.61e-31  +1.22e-16
      5706674932067741 / 1816491048114374  +2.33e-31  +1.22e-16
      6134899525417045 / 1952799169684491  -4.86e-32  +1.22e-16
     17976473982901831 / 5722089387483356  +4.09e-32  +1.22e-16
     24111373508318876 / 7674888557167847  +1.81e-32  +1.22e-16
     30246273033735921 / 9627687726852338  +4.56e-33  +1.22e-16
    66627445592888887 / 21208174623389167  -3.36e-34  +1.22e-16
   230128609812402582 / 73252211597019839  +3.08e-34  +1.22e-16
   296756055405291469 / 94460386220409006  +1.63e-34  +1.22e-16
  363383500998180356 / 115668560843798173  +7.18e-35  +1.22e-16
  430010946591069243 / 136876735467187340  +8.66e-36  +1.22e-16
 1356660285366096616 / 431838381024951187  -8.26e-36  +1.22e-16
 1786671231957165859 / 568715116492138527  -4.19e-36  +1.22e-16
 2216682178548235102 / 705591851959325867  -1.70e-36  +1.22e-16
 2646693125139304345 / 842468587426513207  -1.41e-38  +1.22e-16
```
たとえば。
誤差が $10^{-20}$ 以下の円周率がほしければ、 `21053343141r / 6701487259` を使えばいい。

# 桁数の割に精度が高い有理数

ちなみに。
見つけた範囲内で、桁数の割に精度が高い有理数 ベスト5 は、以下の通り：

|#|値|誤差|log10(誤差)+log10(分母×分子)|
|--:|--:|:--:|:--|
|1|355/113|+2.67e-07|-1.971|
|2|2646693125139304345/842468587426513207|-1.41e-38|-1.502|
|3|21053343141/6701487259|-2.62e-22|-1.433|
|4|22/7|+1.26e-03|-0.711|
|5|8958937768937/2851718461558|-7.72e-27|-0.705|

有名有理数の強さが光るね。