【发布时间】:2014-02-06 02:34:58
【问题描述】:
我需要在斐波那契数列中使用 JavaScript 计算斐波那契数的索引。我需要在不使用递归或循环的情况下做到这一点。我找到了以下公式in the Math forum:
n=⌊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,原因很明显。库本身没有计算log的方法,我也不会写这个函数。
我从来没有想到任何具有如此小的底数 (phi) 的数字的对数可以大于 JavaScript 整数的最大值。你们能指出我正确的方向吗?我是否应该将其保留在获取小于 Fib(1500) 的数字的索引并称之为好?
【问题讨论】:
标签: javascript fibonacci bigint