Я знаю, что числа JavaScript - это просто «двойные» числа и имеют только 52-битную точность для дробной части. Тем не менее, НАСТОЯЩИЕ числа JavaScript, кажется, имеют более практичную точность для огромных чисел.
Например, предопределенная константа Number.MAX_VALUE
представляет наибольшее положительное конечное значение типа Number, которое приблизительно равно 1,7976931348623157e+308. Здесь я могу получить доступ к конечным цифрам этого значения с помощью оператора модуля.
> Number.MAX_VALUE
1.7976931348623157e+308
> Number.MAX_VALUE % 10000000000
4124858368
Из этого результата я могу предположить, что это число равно 7fef ffff ffff ffff
, что представляет собой (1 + (1 − 2 ** −52)) × 2 ** 1023 (Wikipedia) и может быть записано в точной форме следующим образом:
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
... и мы увидели только 10 последних цифр из этих 309 цифр. Поэтому я думаю, что каждое число JavaScript должно иметь точные цифры в десятичной форме.
Мой вопрос: как получить эту строку из 309 цифр в JavaScript? Такие вызовы, как Number.MAX_VALUE / 10000000000 % 10000000000
, просто терпят неудачу из-за такой огромности.
Кроме того, как насчет крошечных чисел, таких как Number.MIN_VALUE
? Это должна быть следующая дробь в десятичной форме.
0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004940656458412465441765687928682213723650598026143247644255856825006755072702087518652998363616359923797965646954457177309266567103559397963987747960107818781263007131903114045278458171678489821036887186360569987307230500063874091535649843873124733972731696151400317153853980741262385655911710266585566867681870395603106249319452715914924553293054565444011274801297099995419319894090804165633245247571478690147267801593552386115501348035264934720193790268107107491703332226844753335720832431936092382893458368060106011506169809753078342277318329247904982524730776375927247874656084778203734469699533647017972677717585125660551199131504891101451037862738167250955837389733598993664809941164205702637090279242767544565229087538682506419718265533447265625
(1e25+1) === 1e25
- person Pointy   schedule 15.03.2015