Как JavaScript Date.getTime() (миллисекунды) сопоставляется с 64-битным числом с плавающей запятой?

Я запутался в объекте JavaScript Date и его методе getTime(). От: минимальная и максимальная дата

Там написано, что фактические макс и мин. количество миллисекунд (мс), представляемых объектом JS Date, составляет (-/+)8 640 000 000 000 000 мс с 1 января 1970 года по всемирному координированному времени.

Однако для 8.640.000.000.000.000 требуется 53 бита.

С другой стороны, все числа JS представляют собой 64-битные числа с плавающей запятой, содержащие только 52 дробных бита (исключая бит знака).

Таким образом, как JS может сохранить результат Date.getTime(), когда Date является либо максимальным, либо минимальным значением даты? Для этого нужно использовать один из битов экспоненты, верно?

Означает ли это также, что преобразование JS Date (через количество мс) в int64 (например, для использования в Qt) строго невозможно?


person dirac bracket    schedule 05.08.2018    source источник
comment
52 дробных бита совпадают с 53 значащими битами. Поскольку мы используем двоичное число (только 0 и 1), один бит в мантиссе неявно равен 1 (и float, и double используют этот трюк), когда число не равно нулю.   -  person user202729    schedule 05.08.2018
comment
Планируете более чем на 100 тысяч лет вперед?   -  person dtech    schedule 05.08.2018
comment
Спасибо. Забыли о нормализации, которая делает старший бит всегда равным 1 (для ненулевых чисел) и, следовательно, может быть сделана неявной, фактически давая дополнительный бит...   -  person dirac bracket    schedule 06.08.2018


Ответы (1)


JavaScript представляет числа в формате двойной точности IEEE-754 (64 бита). это дает вам 53-битную точность. JS внутренне сохраняет как 64-битные числа с плавающей запятой, а даты JavaScript внутренне хранятся как миллисекунды с начала эпохи. Вы можете использовать getTime() JavaScript . Я верну значение эпохи. Это значение эпохи можно использовать в Qt как значение эпохи или создать дату из этого значения эпохи, используя

fromMSecsSinceEpoch(qint64 мсек)

person Masthan    schedule 06.08.2018