2

В learn.js приводится пример:

console.log( 9999999999999999 ); // покажет 10000000000000000

В учебнике говорится, что причина такому поведению в том, что отведенных 52 бит на цифры до десятичной запятой не хватает. Я не понимаю. По идее, если не хватает памяти, число наоборот должно уменьшаться, а не наоборот - увеличиваться как это происходит в примере выше (было 16, стало 17 знаков).

P.S. И кстати, насколько я знаю, если числу не хватает отведенной ему памяти, должно выводить Infinity. Почему в этом случае не выводится Infinity?

Может кто-нибудь получше объяснить как это работает?

Eva
  • 1,889
  • 8
  • 26
  • Infinity это некоторое виртуальное число (математическое понятие) фактически получить его путем счетчика не возможно (простой пример: Infinity - Infinity дает NAN что не могло быть если бы это было числом) Что касается нехватки памяти и уменьшения числа то тут (число не обязано уменьшаться) числа огрубляются в ту или иную сторону с некоторой погрешностью речь идет о битах а не о байтах и конечно про мантису если дробные числа. Польза от Infinity заключается в том что оно позволяет взять наибольшее из положительных или наименьшее из отрицательный чисел - что очень полезно в алгоритмах. – Daniil Loban Aug 11 '21 at 15:11
  • @Daniil Loban фактически получить его путем счетчика не возможно если ввести достаточно большое число, то можно - console.log( 1e500 ); //Infinity – Eva Aug 12 '21 at 08:32
  • @Daniil Loban Скорее всего, как я понимаю, здесь дело в том, что введенное число (9999999999999999) больше максимально безопасного в JS. console.log(Number.MAX_SAFE_INTEGER); //9007199254740991 Значение чисел которых больше максимально безопасного числа, могут иметь неточности - округляться и т.д. А Infinity выводится, когда число явно превышает отведенную ему память - 64 бита. – Eva Aug 12 '21 at 08:32
  • Да, был не прав (можно получить путем сложения, что немного абсурдно - нельзя досчитать до бесконечности), инфинити начинается с 1e309 где-то, на мой вгляд это уже косяк языка, хотя вряд ли кто-то орудует такими числами в реальности. По поводу округления если найду хороший пример добавлю в ответ – Daniil Loban Aug 12 '21 at 12:36
  • 1
    https://msiter.ru/tutorials/javascript/js_numbers на мой взгляд самое понятное объяснение – Daniil Loban Aug 12 '21 at 12:44

0 Answers0