Когда число с плавающей запятой переполняется? - PullRequest
0 голосов
/ 22 ноября 2018

Почему

Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE
=> false

, но

Number.MAX_VALUE + Number.MIN_VALUE == Number.MAX_VALUE
=> true

?

Я ожидал, что все, что я добавлю к максимальному значению, должно переполниться.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

JavaScript Number.MAX_VALUE назван неправильно.Это не максимальное представимое значение.Это максимальное представимое конечное значение.Фактическое максимальное представимое значение равно бесконечности.

Если имя было правильным, так что Number.MAX_VALUE было бесконечностью, тогда Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE было бы истинно, потому что бесконечность плюс бесконечность истинно.

Какэто математическое значение Number.MAX_VALUE + Number.MAX_VALUE выходит за пределы представимых конечных значений, поэтому оно округляется до бесконечности.

Number.MAX_VALUE + Number.MIN_VALUE == Number.MAX_VALUE верно, поскольку арифметические округления до ближайшего представимого значения и добавление небольшого значения кмаксимальное конечное значение дает результат, очень близкий к максимальному конечному значению, поэтому он округляется до максимального конечного значения.

(Примечание. Правило о округлении до ближайшего представимого значения обрабатывает бесконечность, как если бы оно было в нормальномпоместите в конец конечных значений, поэтому любой результат, который больше или равен Number.MAX_VALUE плюс половина «шага» за ним, округляется до бесконечности.)

0 голосов
/ 22 ноября 2018

Представьте себе это так:

MAX_VALUE = Бесконечно

MIN_VALUE = 0

Итак, когда вы добавляете MAX_VALUE с MIN_VALUE, это похоже на то, что вы добавили 0. Так что это по-прежнему MAX_VALUE.

Представьте, что все ненулевые цифры находятся далеко, далеко вправо, и, следовательно, они не имеют никакого чистого эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...