// ページ読み込み時またはボタン等から呼び出されるエントリー関数
function enter(){
// アンダーフロー限界まで自動計算
var result = calcpi();
var elm = document.getElementById('SVAL');
elm.value = result;
}
function calcpi() {
let n = 4;
let edges = 1;
let an = 0.0;
let pi = Math.sqrt(2 - an) * edges;
let bpi;
for (let step = 1; step < 100; step++) {
bpi = pi;
n *= 2;
edges *= 2;
an = Math.sqrt(2 + an); // これが次のan
const sn = Math.sqrt(2 - an); // 新しい一辺
pi = sn * edges;
// より丁寧な変化検知(絶対差 or 相対差)
if (Math.abs(pi - bpi) < 1e-15 || pi === bpi) {
return `限界到達! Step:${step} (正${n.toLocaleString()}角形)
/ π/2 ≒ ${bpi.toFixed(16)}
(誤差 = ${(Math.abs(bpi - Math.PI/2) * 1000000).toFixed(2)} × 10^-6)`;
}
}
return pi.toString();
}
計算結果: