Это потому, что вы используете слишком большие числа, а JavaScript не знает, как их обрабатывать.
Метод Number.isSafeInteger () определяет, будет липредоставленное значение - это число, которое является безопасным целым числом.
2 ^ 53 - 1 является безопасным целым числом: оно может быть точно представлено, и никакие другие целые числа не округляются до него в любом режиме округления IEEE-754.Напротив, 2 ^ 53 не является безопасным целым числом.
console.log (warn (Math.pow (2, 53)));// ожидаемый результат: «Точность может быть потеряна!»
MDN
например, во втором алгоритме вы выполняете
var res = (z2 * Math.pow(10, 2 * m ) ) + ( (z1-z2-z0) * Math.pow(10, m )) + z0;
, что небезопаснооперации в вашем случае, и JavaScript не может его правильно вычислить, что дает вам неверный результат.
Если вы поместите этот код под вышеупомянутой строкой, вы увидите, что.
console.log(Number.isSafeInteger(10 ** (2 * m)));
Thisоценивается как ложное.