Некорректные значения корня
Есть код:
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 Подскажите кто знает, как это победить...
Ответы (1 шт):
Автор решения: user3459487
→ Ссылка
Слишком большие числа получаются. 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)