Я пытался получить числа (iccid - что-то, что нужно вычислить) между start_number и end_number, используя следующую логику:
let { start_iccid, end_iccid } = req.value.body;
let list = [];
let lowEnd = parseInt(start_iccid); // sample value : 100000000000000000
let highEnd = parseInt(end_iccid); // sample value : 100000000000000029
for (let i = lowEnd; i <= highEnd; i++) {
list.push(i);
}
Как и ожидалось, я получаю следующие ошибки:
FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory
1: node::Abort() [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
2: 0x8c21ec [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
3: v8::Utils::ReportOOMFailure(char const*, bool) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
5: v8::internal::Heap::AllocateUninitializedFixedDoubleArray(int, v8::internal::PretenureFlag) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
6: v8::internal::Factory::NewFixedDoubleArray(int, v8::internal::PretenureFlag) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
7: 0xd554b5 [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
8: v8::internal::Runtime_GrowArrayElements(int, v8::internal::Object**, v8::internal::Isolate*) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
9: 0x217d6df042fd
Я понимаю, что в Javascript все числа являются IEEE числами с плавающей запятой двойной точности , что означает, что у меня есть только 16 цифр точности; остальные 64 бита зарезервированы для показателя степени. И мне нужно проделать некоторые уловки, чтобы получить больше точности, если вам нужны все 64 бита.
Я пытался использовать библиотеку javascript big-number , но не смог заставить ее работать с циклом for
.
Как лучше всего решить эту проблему?
Я также пытался увеличить nodejs memory limit
после прочтения этой темы, но не смог решить проблему: Поток StackOverflow
Примечание : самое большое безопасное целое число в JavaScript - 9007199254740991 (253-1), тогда как самое маленькое безопасное целое число - -9007199254740991.
ICCID (идентификатор платы с интегральной схемой) - SIM-карта содержит уникальный серийный номер (ICCID). ICCID хранятся на SIM-картах, а также печатаются на SIM-карте в процессе персонализации. Может содержать от 18 до 20 цифр