如果您在Chrome的控制台中尝试9n**9n**9n
,Chrome会中断(类似于无限循环)。
我的意思是,如果您尝试
9**9**9
,它将返回Infinity
,这很好。Infinity
? 我也在Firefox中进行了尝试,并且这个问题不存在,因为当前SpiderMonkey中没有BigInt实现。
谢谢!
最佳答案
如前所述,9n
是9
的BigInt表示形式。**
(幂)运算符从右到左工作,导致结果快速提升:
2n**2n**2n === 2n ** 4n === 16n
3n**3n**3n === 3n ** 27n === 7625597484987n
4n**4n**4n === 4n ** 256n === 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096n
在我的系统上,这从
7n**7n**7n
变得很费时,这需要大约32秒来计算打印。结果是695976位,其中前5000位打印在控制台中。我没有再尝试过,但是我想说它只是在考虑结果。这可能需要数小时或数天才能计算出打印量(或者有时可能会出现“内存不足”情况)。
更新:
我刚刚在Chrome控制台中尝试了
var x = 7n**7n**7n
,因此只需将其分配给一个变量即可完成此操作。事实证明,将bigint转换为字符串是很费时间的。打印 x.toString().length
与打印x
或7n**7n**7n
花费的时间相似。进一步的实验揭示了其他有趣的行为,请参见以下结果:
// Pure calculation time increases significantly when the exponent grows:
var x = 7n**7n**7n; // ~ 1200 ms
var x = 7n**8n**7n; // ~ 7000 ms
var x = 7n**7n**8n; // ~ 62000 ms
var x = 7n**8n**8n; // ~ 470000 ms
// But it's a different story when the base number is 'simple' in binary terms, e.g. 8n:
var x = 8n**7n**7n; // ~ 1 ms
var x = 8n**8n**7n; // ~ 1 ms
var x = 8n**7n**8n; // ~ 7 ms
var x = 8n**8n**8n; // ~ 17 ms
是的,这一切都结束了:
var x = 32n**16n**8n;
给出:
Chrome的上限似乎是 10亿位(1e9位),或大约125 MB-引用:https://github.com/tc39/proposal-bigint/issues/174#issuecomment-437471065