Мне нужно рассчитать индекс числа Фибоначчи с JavaScript в последовательности Фибоначчи. Мне нужно сделать это без использования рекурсии или цикла. Я нашел следующую формулу: in the Math forumИндекс действительно большого числа Фибоначчи
п = ⌊logφ (F⋅5√ + 12) ⌋
и закодированы его в JavaScript:
function fibIndex(fib)
{
fib = BigNumber(fib);
return logBasePhi(fib.times(Math.sqrt(5)).plus((1/2)));
}
function phi()
{
return (1 + Math.sqrt(5))/ 2;
}
function getBaseLog(x, y) {
return Math.log(y)/Math.log(x);
}
function logBasePhi(x)
{
return getBaseLog(phi(), x);
}
Обратите внимание на .times()
и .plus()
функции, которые являются частью this BigNumber Library, которая была чрезвычайно полезна до этого момента. Это прекрасно работает, пока номер Фибоначчи, который я хочу найти, для индекса действительно большой.
Проблема:
мне нужен другой способ вычислить логарифм с таким большим числом. Если у меня есть действительно большое число, например, Фибоначчи 2000 года, я получаю Infinity
по понятным причинам. Сама библиотека не имеет методов для вычисления журнала, и я тоже не могу написать эту функцию.
Я бы никогда не думал, что логарифм любого числа с такой небольшой базой (phi) может быть больше, чем max для целых чисел JavaScript. Можете ли вы, ребята, указать мне в правильном направлении? Должен ли я просто оставить его при получении индекса для чисел меньше Fib (1500) и назвать его хорошим?
+1 Фернандо. У этой библиотеки есть функция Log. Я проверю его и посмотрю, смогу ли я с ним создать функцию. Благодарю. –
Фернандо, еще раз спасибо за ссылку на эту библиотеку. Я перешел на него, и все работает как шарм. Я добавлю ответ, чтобы показать код. –