「JavaScript/長整数」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
init.
 
Ef3 (トーク | 投稿記録)
→‎使用例: 円周率を77桁求める
70 行
10n != "10"; // false
</source>
厳密比較演算子は両辺のが一致しない場合は不一致となります。
<source lang="javascript">
1n === 0; // false
76 行
10n !== "10"; // true
</source>
 
== 使用例 ==
多倍長整数演算の特徴を生かした短いプログラムを紹介します。
 
'''円周率を77桁求める'''
<source lang="javascript" line>
let k = 2n, a = 4n, b = 1n, a1 = 12n, b1 = 4n;
let result = "";
[k, a, b, a1, b1] = [2n, 4n, 1n, 12n, 4n];
for (let i = 0; i < 100; i++) {
let p = k * k, q = 2n * k + 1n;
k += 1n;
[a, b, a1, b1] = [a1, b1, p * a + q * a1, p * b + q * b1];
d = a / b;
d1 = a1 / b1;
while (d == d1) {
result += Number(d).toString();
[a, a1] = [10n * (a % b), 10n * (a1 % b1)];
[d, d1] = [a / b, a1 / b1];
}
}
console.log(result.length); // 77
console.log(result); // 31415926535897932384626433832795028841971693993751058209749445923078164062862
console.log(Math.PI.toFixed(77)); // 3.14159265358979311599796346854418516159057617187500000000000000000000000000000
</source>
徒に行数が長くなるので、分割代入を使って行数を短縮しました。
整数リテラルはループカウンタ以外は全て 12n の様な BigIntリテラルにしなければいけませんが、忘れると TypeError になるのでバグ化は意外としにくいです。
Math.PIと一致していませんが、BigIntで求めた値が正確です。
 
[[Category:JavaScript|{{SUBPAGENAME}}]]