Количество бит в Javascript-номерах
Я работаю в Javascript только с целыми числами (в основном добавляя числа и меняя их). Интересно, насколько велики они могут быть без потери каких-либо бит.
Например, насколько велика X
может быть такой, что 1 << X
будет представлять 2^X
?
Ответы
Ответ 1
Все числа в JavaScript на самом деле соответствуют стандарту IEEE-754 с плавающей запятой. Они имеют 53-битную мантиссу, что должно означать, что любое целочисленное значение с величиной приблизительно 9 квадриллионов или менее, а именно 9 007 199 254 740 991, будет представлено точно.
ВНИМАНИЕ: в 2018 году основные браузеры и NodeJS также работают с новым примитивным типом Javascript, BigInt, решая проблемы с целочисленным значением.
Ответ 2
Все числа в JavaScript являются 64-битными (с двойной точностью) числами с плавающей запятой.
Здесь описание формата и какие значения могут и не могут быть представлены с ним.
Ответ 3
Все ответы частично неверны - возможно, из-за новых спецификаций ES6/ES7 - и готовы, почему:
Прежде всего, в JavaScript представление числа равно 2 ^ 53 - 1, что верно для ответа @Luke, мы можем доказать это, запустив Number.MAX_SAFE_INTEGER
, который покажет большое число, затем мы выполняем log2
чтобы подтвердить, что количество бит одинаково:
Number.MAX_SAFE_INTEGER
9007199254740991
Math.log2(9007199254740991)
53
![enter image description here]()
Однако побитовая операция рассчитана на 32 бита (4 байта), а это означает, что если вы превысите 32-битные смены, вы начнете терять биты.
Добро пожаловать в Javascript!