Почему в переменная начинает хранить значение infinity?

Никак не могу понять почему переменная let sQuare, становиться infiity.

function getRandomInt(min, max) {
    return Math.random() * (max - min) + min;
}


let random = Math.random()*10;
let nTrials = 5000; // кол-во испытаний   
let nSteps = 500; // кол-во шагов
let arrN = [];
let sTwo = []; // список квадратов отклонения

// подсчет в цикле
for (let i = 10; i < nSteps; i+=10)
{
    arrN.push(i); 
    s = 0;
    sQuare = 0;

    for (let j = 0; j <= nTrials; j++)
    {
        s += s + getRandomInt(-1,1);
        sQuare += Math.sqrt(s);
    }
    console.log(sQuare);
    sQuare = sQuare/nTrials;
    sTwo.push(sQuare)
}
console.log(sTwo);


Ответы (2 шт):

Автор решения: Zhihar

Ну NaN оно становится, потому что

s += s + getRandomInt(-1,1); // изначально s = 0 и может стать s < 0
sQuare += Math.sqrt(s);

приводит к тому, что вычисляется квадратный корень из отрицательного числа

А Infinity вылезает, потому что 5000 раз вы делаете

s += s + getRandomInt(-1,1);

Что приводит к уходу из диапазона

например, s += s выполненное 5000 раз - равно s0 * 2^5000 - s0 * 1e1505, что как-то многовато :)

→ Ссылка
Автор решения: Igor
for (let j = 0; j <= nTrials; j++)
{
    let r = getRandomInt(-1,1);
    sQuare += r * r;
}
→ Ссылка