Как уже было сказано, 9n
является представлением BigInt 9
.
Оператор **
(power) работает справа налево, вызывая быструю эскалацию результатов:
2n**2n**2n === 2n ** 4n === 16n
3n**3n**3n === 3n ** 27n === 7625597484987n
4n**4n**4n === 4n ** 256n === 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096n
В моей системе это становится довольно медленным с 7n**7n**7n
, что занимает около 32 секунд до вычисления печати.В результате получается 695976 цифр, первые 5000 из которых напечатаны в консоли.
Я больше не пробовал, но я бы сказал, что это просто уничтожает результат.Это может занять несколько часов или дней, чтобы вычислить отпечаток (или, возможно, в какой-то момент может возникнуть ситуация нехватки памяти).
Обновление:
Я только что попробовал var x = 7n**7n**7n
в консоли Chrome, поэтому просто присвоил его переменной, и это почти мгновенно закончилось.Оказывается, преобразование бигинта в строку - это то, что отнимает время;печать 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;
дает:
VM436:1 Uncaught RangeError: Maximum BigInt size exceeded
at <anonymous>:1:28
Верхний предел в Chrome выглядит как 1 миллиард бит (1e9 бит) или около 125 МБ - ссылка: https://github.com/tc39/proposal-bigint/issues/174#issuecomment-437471065