如何在Javascript中避免使用“Infinity”和console.log中的大量数据?

问题描述 投票:0回答:1

我试图找到Fibonacci序列中的第一个数字,包含超过1000个数字。

给定数n(例如4),我找到了一种方法来找到具有n位的第一个数字在Fibonacci序列中的位置,以及找到给定它在序列中的位置的数字的方法。

比如说,你需要知道Fibonacci序列中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(即数字在Fibonacci序列中的位置)和fNumber(您要查找的数字)。例如,如果要查找第一个带有4位数字的数字及其在序列中的位置,您将在第17位获得数字1597,这是正确的。

到现在为止还挺好。

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

如何找到该号码并避免无限?

javascript math fibonacci infinity
1个回答
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。或者,几个“大型”库中的任何一个将数字存储为数字串(字面意思)。

© www.soinside.com 2019 - 2024. All rights reserved.