MENU
307,474

スレッドNo.2489

円周率の求め方

よく円周率の近似値を求めるのに円に内接する正多角形を利用している方法を目にする。
たぶんπ=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・・・・・
の数値を与えてくれる。

引用して返信編集・削除(未編集)

下記の 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));

引用して返信編集・削除(未編集)

[2490] の続きです。

こういうことらしいです。

引用して返信編集・削除(未編集)

このスレッドに返信

ロケットBBS

Page Top