javascript interview question #13

Мы же просто выводим число, что может пойти не так?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Под капотом, в JavaScript нет целых чисел.

Все они представлены как 64-битные числа с плавающей точкой. Такой формат еще называют double precision.

Первые 52 бита используются, чтобы хранить двоичные цифры, 11 битов хранят позицию плавающей точки и 1 бит отвечает за знак и определяет положительное число или отрицательное.

Когда “не хватает места” чтобы сохранить большое целое число, происходит округление до другого ближайшего целого, которое полностью помещается в выделенные 64 бита.

Значащие биты числа 9999999999999999 невозможно сохранить используя только 52 бита, поэтому при округлении мы избавляемся от самого младшего бита, сдвигаем точку и получаем число 10000000000000000.

В JavaScript, такая ситуация считается нормальной и не приводит к ошибке.

Если не совсем понимаешь, что происходит тут, советую изучить лекцию о двоичной системе курса CoderslangJS.


ОТВЕТ: на экран будет выведено число 10000000000000000