4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2020-05-04

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

円周率

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

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

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

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

\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) とかすればその精度の有理数が得られる。

ソースコード

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

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 で十分。

出力はこんな感じ

                                    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

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

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?