Некорректные значения корня

Рейтинг: 0Ответов: 1Опубликовано: 18.03.2023

Есть код:

let l = 9899103851
for(let i=0;i<25;i++){
 ls = Math.sqrt(l)
 if(ls*ls !== l){
    console.log(false)
 }
 l = ls
 console.log(l)
}

Очень часто вылетает false Подскажите кто знает, как это победить...

Ответы

▲ 0

Посмотрите это.

Слишком большие числа получаются. Js округляет значения, поэтому (ls*ls !== l){ false} .Можно перевести числа в строки для получения точного результата. И сравнивать их.

let l = 9899103851

ls = Math.sqrt(l);

position_dot = Math.floor(Math.sqrt(l) * Math.sqrt(l)).toString().length;
without_dot = Math.floor(Number(ls.toString().replace('.', '')) * Number(ls.toString().replace('.', ''))).toPrecision(32);
real_number = without_dot.substring(0, position_dot) + '.' + without_dot.substring(position_dot, without_dot.length);

console.log('real_number : ' + real_number);

Max_number = Number(real_number);
console.log('Max_number : ' + Max_number)