Как избежать «Бесконечности» и console.log большого количества в Javascript? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь найти первое число в последовательности Фибоначчи, которое содержит более 1000 цифр.

Учитывая число n (например, 4), я нашел способ найти, какое место занимает первое число с n-значными цифрами в последовательности Фибоначчи, а также способ найти число, учитывая его место в последовательности.

Скажем, например, вам нужно знать первое число с 4 цифрами в последовательности Фибоначчи, а также его место в последовательности. Мой код будет работать так:

var phi = (1+Math.sqrt(5))/2;
var nDigits = 4;


var fEntry = Math.ceil(2 + Math.log(Math.pow(10, nDigits- 
1))/Math.log(phi)); 
var fNumber = 2 * Math.pow(phi, fEntry);

console.log(fEntry);
console.log(fNumber);

В консоли вы увидите fEntry (то есть место, в котором находится число в последовательности Фибоначчи) и fNumber (искомое число). Например, если вы хотите найти первое число из 4 цифр и его место в последовательности, вы получите номер 1597 на месте 17, что является правильным.

Пока все хорошо.

Проблемы возникают, когда я хочу найти большие числа. Мне нужно найти первое число с 1000 цифрами в последовательности Фибоначчи, но когда я пишу nDigits = 1000 и запускаю код, консоль отображает «Бесконечность» для fEntry и для fNumber. Я предполагаю, что причина в том, что мой код включает вычисления с числами выше, чем то, с чем может справиться Javascript.

Как мне найти это число и избежать Бесконечности?

1 Ответ

0 голосов
/ 05 апреля 2019

Как мне найти это число и избежать бесконечности?

Вы не можете, с типом number.Хотя он может содержать огромные значения, он теряет целочисленную точность после Number.MAX_SAFE_INTEGER (9,007,199,254,740,991):

const a = Number.MAX_SAFE_INTEGER;
console.log(a);     // 9007199254740991
console.log(a + 1); // 9007199254740992, so far so good
console.log(a + 2); // 9007199254740992, oh dear...

Вы можете использовать новый BigInt на платформах, которые его поддерживают.Альтернативно, любая из нескольких библиотек "big int", которые хранят числа в виде строк цифр (буквально).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...