よく円周率の近似値を求めるのに、円に内接する正多角形を利用している方法を目にす
る。たぶんπ=3.141592・・・までの数値を手に入れるまでには、正2812角形の図形を必要と
するのかな?
一方、単位円で動径が x 軸とθ(ラジアン)である時、
θ≒3*sin(θ)/(2+cos(θ))
なる関係性を利用すれば、θ=π/60(=3°)のラジアン角を利用することで、
π/60≒3*sin(π/60)/(2+cos(π/60))
から、 π≒180*sin(π/60)/(2+cos(π/60)
ここで、らすかるさんのHPに載せてあった三角関数表を利用させてもらうと、
π≒180*(-2*sqrt(15-3*sqrt(5))+2*sqrt(5+sqrt(5))+sqrt(30)+sqrt(10)-sqrt(6)-sqrt(2))/
(32+2*sqrt(15+3*sqrt(5))+2*sqrt(5+sqrt(5))+sqrt(30)-sqrt(10)-sqrt(6)+sqrt(2))
これを計算させると、 3.141592252236561・・・・・ の数値を与えてくれる。
Dengan kesaktian Indukmu さんからのコメントです。(令和7年2月5日付け)
下記の JavaScript 言語によるコードが 円周率の近似値を出力します。
どうしてこんなアルゴリズムで求められるのか分かりませんけれども。 (・o・;)
function spigotPi(digits) {
let len = Math.floor(digits * 10 / 3) + 1;
let array = new Array(len).fill(2);
let result = [];
let q = 0, r = 0, num = 0;
for (let i = 0; i < digits; i++) {
let carry = 0;
for (let j = len - 1; j > 0; j--) {
num = array[j] * 10 + carry;
array[j] = num % (2 * j + 1);
carry = Math.floor(num / (2 * j + 1)) * j;
}
num = array[0] * 10 + carry;
q = Math.floor(num / 10);
r = num % 10;
array[0] = r;
result.push(q);
}
result.splice(1, 0, "."); // 小数点を追加
return result.join("");
}
// 使用例: π の最初の 100 桁を求める
console.log(spigotPi(100));
こういうことらしいです。
GAI さんからのコメントです。(令和7年2月6日付け)
πやeなどは代表的無理数でまた超越数でもあり、並んでいく数字はまさに素数のように何
が次に並んでいくのか見当もつかない全く気紛れでしかないような、ある意味乱数に使いたく
なる代物なのに、例のごとくある意味規則的な法則により無限に数字を生み出していけるもの
が存在できることが不思議でなりません。
JavaScript 言語でコードされていたのを、PARI/GP様にコード変更して実行させたら、
gp > print(spigotPi(780));
[3].[1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6,
4, 3, 3, 8, 3, 2, 7, 9, 4, 10, 2, 8, 8, 4,
1, 9, 7, 1, 6, 9, 3, 9, 9, 3, 7, 5, 1, 0, 5, 8, 2, 0, 9, 7, 4, 9, 4, 4,
5, 9, 2, 3, 0, 7, 8, 1, 6, 4, 0, 6, 2, 8,
6, 2, 0, 8, 9, 9, 8, 6, 2, 7, 10, 3, 4, 8, 2, 5, 3, 4, 2, 1, 1, 7, 0, 6, 7, 9, 8, 2, 1, 4, 8, 0, 8, 6, 5, 1, 3, 2,
8, 2, 3, 0, 6, 6, 4, 7, 0, 9, 3, 8, 4, 4, 6, 0, 9, 5, 5, 0, 5, 8, 2, 2,
3, 1, 7, 2, 5, 3, 5, 9, 4, 0, 8, 1, 2, 8,
4, 8, 1, 1, 1, 7, 4, 5, 0, 2, 8, 4, 1, 0, 2, 6, 10, 1, 9, 3, 8, 5, 2, 1,
1, 0, 5, 5, 5, 9, 6, 4, 4, 6, 2, 2, 9,
4, 8, 9, 5, 4, 9, 3, 0, 3, 8, 1, 9, 6, 4, 4, 2, 8, 8, 1, 0, 9, 7, 5, 6,
6, 5, 9, 3, 3, 4, 4, 6, 1, 2, 8, 4, 7, 5,
6, 4, 8, 2, 3, 3, 7, 8, 6, 7, 8, 3, 1, 6, 5, 2, 7, 1, 1, 10, 1, 9, 0, 9,
1, 4, 5, 6, 4, 8, 5, 6, 6, 9, 2, 3, 4,
6, 0, 3, 4, 8, 6, 1, 0, 4, 5, 4, 3, 2, 6, 6, 4, 8, 2, 1, 3, 3, 9, 3, 6,
0, 7, 2, 5, 10, 2, 4, 9, 1, 4, 1, 2, 7,
3, 7, 2, 4, 5, 8, 6, 10, 0, 6, 6, 0, 6, 3, 1, 5, 5, 8, 8, 1, 7, 4, 8, 8, 1, 5, 2, 0, 9, 2, 0, 9, 6, 2, 8, 2, 9,
2, 5, 4, 0, 9, 1, 7, 1, 5, 3, 6, 4, 3, 6, 7, 8, 9, 2, 5, 8, 10, 3, 5, 9,
10, 1, 1, 3, 3, 0, 5, 3, 0, 5, 4, 8,
8, 2, 0, 4, 6, 6, 5, 2, 1, 3, 8, 4, 1, 4, 6, 9, 5, 1, 9, 4, 1, 5, 1, 1,
6, 0, 9, 4, 3, 3, 0, 5, 7, 2, 6, 10, 3,
6, 5, 7, 5, 9, 5, 9, 1, 9, 5, 3, 0, 9, 2, 1, 8, 6, 1, 1, 7, 3, 8, 1, 9, 3, 2, 6, 1, 1, 7, 9, 3, 1, 0, 5, 1, 1, 8,
5, 4, 8, 0, 7, 4, 4, 6, 2, 3, 7, 9, 9, 6, 2, 7, 4, 9, 5, 6, 7, 3, 5, 1,
8, 8, 5, 7, 5, 2, 7, 2, 4, 8, 9, 1, 2, 2,
7, 9, 3, 8, 1, 8, 2, 10, 1, 1, 9, 4, 9, 1, 2, 9, 8, 3, 3, 6, 7, 3, 3, 6,
2, 4, 4, 0, 6, 5, 6, 6, 4, 3, 0, 8, 5,
10, 2, 1, 3, 9, 4, 9, 4, 6, 3, 9, 5, 2, 2, 4, 7, 3, 7, 1, 9, 0, 6, 10,
2, 1, 7, 9, 8, 6, 0, 9, 4, 3, 7, 0, 2, 7,
7, 0, 5, 3, 9, 2, 1, 7, 1, 7, 6, 2, 9, 3, 1, 7, 6, 7, 5, 2, 3, 8, 4, 6, 7, 4, 8, 1, 8, 4, 6, 7, 6, 6, 9, 4, 0, 5,
1, 3, 1, 9, 10, 0, 5, 6, 8, 1, 2, 7, 1, 4, 5, 2, 6, 3, 5, 6, 0, 8, 2, 7,
7, 8, 5, 7, 7, 1, 3, 4, 2, 7, 5, 7, 7,
8, 9, 6, 0, 9, 1, 7, 3, 6, 3, 7, 1, 7, 8, 7, 2, 1, 4, 6, 8, 4, 4, 0, 8, 10, 1, 2, 2, 4, 9, 5, 3, 4, 2, 10, 1, 4,
6, 5, 4, 9, 5, 8, 5, 3, 7, 1, 0, 5, 0, 7, 9, 2, 2, 7, 9, 6, 8, 9, 2, 5,
8, 9, 2, 3, 5, 4, 1, 10, 1, 9, 9, 5, 6,
1, 1, 2, 1, 2, 9, 0, 2, 1, 9, 6, 0, 8, 6, 3, 10, 3, 4, 4, 1, 8, 1, 5, 9,
8, 1, 3, 6, 2, 9, 7, 7, 4, 7, 7, 1, 3,
0, 9, 9, 6, 0, 5, 1, 8, 7, 0, 7, 2, 1, 1, 3, 4, 9, 9, 9, 9, 9, 9, 8, 3,
7, 2, 9, 7, 8, 0, 4, 9, 9, 5]
と予想に反して10の数字を含んで並ぶんですが(コード上どこを変更したらいいのか今のと
ころわからないのでそのままです。)
ただし、2,10と並んでいれば-->3,0;1,9,10と並んでいたら-->2,0,0 として見て行けば、小数点
以下762桁から9が6個並ぶファインマンポイントまでπの正確な数値を見て行くことが出来る
ようになっています。
ほんとに不思議ですね、πは言われた通りに動いているだけです。しかし、並んでいく数字
は全くランダムに発生、この規則性と不規則性の共存が起こることが驚異です。
以下、工事中!