Я пытаюсь разрешить число Пи до n цифр в JavaScript по следующей формуле:
#!/usr/bin/env js60
function calculatePi(n) {
var q = t = k = 1
var m = x = 3
var n = n + 1
var r = 0
str = ''
while (str.length < n) {
if (4 * q + r - t < m * t) {
str += m
var rr = r
r = 10 * (r - m * t)
m = Math.floor((10 * (3 * q + rr)) / t - 10 * m)
q = 10 * q
}
else {
m = Math.floor(((q * (7 * k + 2)) + (r * x)) / (t * x))
r = ((2 * q) + r) * x
t = t * x
q = q * k
k = k + 1
x = x + 2
}
}
return str.slice(0, 1) + '.' + str.slice(1)
}
print(calculatePi(19))
Вот как это работает на языке с поддержкой целочисленных значений произвольной длины.
Но в JavaScript код генерирует правильные значения до 18 десятичных знаков, и после этого число становится действительно большим для работы. Хуже того, если функции присвоено большое число, например, 10000, она будет выполняться в бесконечном цикле.
Когда я пытаюсь написать большое число с добавленным к нему n
(как предложено здесь ):
var a = 1000000000000000000000000000n
Я получаю:
typein:1:8 SyntaxError: identifier starts immediately after numeric literal:
typein:1:8 var a = 1000000000000000000000000000n
typein:1:8 ........^
Как представить целое число произвольной длины в JavaScript?