строго говоря, 1.0/0.0
вовсе не бесконечность, она не определена.
Как говорит Дэвид в своем ответе, у поплавков есть способ выразить число, которое не находится в диапазоне от самого высокого числа, которое оно может представлять, до самого низкого. Эти значения известны под общим названием «Не число» или просто NaN. NaN также может возникать из-за вычислений, которые действительно бесконечны (например, limx -> 0 ln2 x
), значений, которые являются конечными, но выходят за пределы диапазона с плавающей запятой (например, 10100100), а также как неопределенные значения, такие как 1/0.
Числа с плавающей запятой не совсем четко различают неопределенные значения, переполнение и бесконечность; какая комбинация битов получается в результате этого вычисления, зависит. Поскольку просто напечатать «NaN» или «Не число» немного сложнее понять людям, которые не знают, как представлены значения с плавающей запятой, этот форматировщик просто печатает «Бесконечность» или иногда «-Бесконечность». Поскольку он обеспечивает то же самое уровень информации, когда вы знаете, что такое FP NaN, и имеет какое-то значение, когда вы этого не знаете.
Целые числа не имеют ничего сравнимого с NaN с плавающей запятой. Поскольку нет разумного значения для целого числа, когда вы выполняете 1/0, остается единственный вариант — вызвать исключение.
Тот же код, написанный на машинном языке, может либо вызвать прерывание, что сравнимо с исключением Java, либо установить регистр условия, который будет глобальным значением, чтобы указать, что последним вычислением было деление на ноль. какие из них доступны, немного зависит от платформы.
person
SingleNegationElimination
schedule
10.09.2011