如何避免“ Infinity”和console.log中的大量Javascript?

时间:2019-04-05 14:34:22

标签: javascript math fibonacci infinity

我试图找到斐波那契数列中的第一个数字以包含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位数字及其在顺序中的位置,您将在位置17处获得数字1597,这是正确的。

到目前为止很好。

当我想找到大数字时出现问题。我需要在斐波那契数列中找到第一个具有1000位数字的数字,但是当我编写nDigits = 1000并运行代码时,控制台将为fEntry和fNumber显示“ Infinity”。我猜想原因是我的代码涉及的计算数字比Javascript可以处理的数字高。

如何找到该数字并避免无穷大?

1 个答案:

答案 0 :(得分:0)

  

如何找到该数字并避免无穷大?

不能使用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。另外,几个“大整数”库中的任何一个都将数字存储为数字字符串(字面意义上)。