hiratatomotaka
@hiratatomotaka

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

円周率アルゴリズム(24,8,32)

解決したいこと

円周率を求めるコードがあるので、そのアルゴリズムを知りたい。

python ドキュメント > decimal モジュール > レシピ > pi()
では、 円周率を計算する、次のコードが紹介されています。

def pi():
    """Compute Pi to the current precision.

    >>> print(pi())
    3.141592653589793238462643383

    """
    getcontext().prec += 2  # extra digits for intermediate steps
    three = Decimal(3)      # substitute "three=3.0" for regular floats
    lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
    while s != lasts:
        lasts = s
        n, na = n+na, na+8
        d, da = d+da, da+32
        t = (t * n) / d
        s += t
    getcontext().prec -= 2
    return +s               # unary plus applies the new precision

このアルゴリズムの詳細についての解説が、ドキュメント内に見つかりませんでした。

これは、どのようなアルゴリズムなのでしょうか?

特に、 da の初期値 24, na の増分 8, da の増分 32 はどこから来た数字なのでしょうか?

0

2Answer

こういうのはAIが得意そうですね
Windows copilotに聞いてみました。
「次のアルゴリズムは、円周率をもとめるpythonコードです。 どのようなアルゴリズムなのか、説明してください。
特に、 da の初期値 24, na の増分 8, da の増分 32 はどこから来た数字なのでしょうか?」


素晴らしい質問です!円周率を求めるためのこのアルゴリズムは、ある種の収束プロセスに基づいており、その数値は計算の安定性と収束速度を保証するために選ばれたものです。

具体的には、このアルゴリズムはマチンの公式を利用したもので、πを計算するために使用されます。 nadaの更新ルールは、特定の収束特性を持つように設計されています。

  • da の初期値 24:

    • この初期値は、アルゴリズムが最初のステップで適切に動作するように選ばれたものです。初期値 24 は、分母の初期値 3 から始まり、特定の収束速度を持つように設計されています。
  • na の増分 8:

    • naの増分 8 は、数列の分子部分が適切に成長するために設定されています。これは、計算の精度と効率を保つために選ばれたものです。
  • da の増分 32:

    • daの増分 32 は、分母部分が一定のパターンで増加し、全体の計算が収束するために設定されています。この値も、精度と効率を保つために選ばれています。

これらの値は、実際の数値に基づく計算を効率的に収束させるために、経験的に選ばれたものです。数学的背景としては、これらの数値はアルゴリズムの設計者が計算の収束特性を分析し、最適な値として決定したものです。

0Like

Comments

  1. @hiratatomotaka

    Questioner

    ご回答ありがとうございます。
    AIは私も既に利用しましたが、次の2点により、信頼できないと考えております。

    1点目: マジックナンバーの特別性

    24,8,32などのマジックナンバーは「計算を効率的に収束させるために経験的に選ばれた」ものとして解説されていました。
    これが真であるならば、
    マジックナンバーを多少いじっても、効率が悪くなるだけで、計算結果に大きな誤差は出ないはずです。

    しかし、マジックナンバーを
    24 → 20
    8 → 10
    32 → 30
    と変更し、精度10桁で円周率を求める実験を行うと、

    Decimal('3.179980024')

    という結果になり、大きな誤差が出ました。
    したがって、マジックナンバーは計算効率を最適化するために経験的に選ばれたと考えるのは不自然で、
    何か理論的な意味をもつ「特別」な数字であると考える方が自然ではないでしょうか?

    2点目: AIの非再現性

    chatGPT で何度か同じ質問を繰り返すと、
    アルゴリズムについて「マチンの公式を利用したもの」と説明することもあれば、
    「ラムヌジャンの円周率近似式によるもの」と説明することもありました。

    聞くタイミングによって、答えるアルゴリズムが違うというのは、明らかにおかしいです。

  2. そうでしたか
    しつれいしました。

  3. @hiratatomotaka

    Questioner

    @calcMCalcm さん
    ご回答ありがとうございます!
    おかげさまで解決しました!

Your answer might help someone💌