MSVC деление на ноль - PullRequest
       11

MSVC деление на ноль

1 голос
/ 23 марта 2011

У меня есть два консольных приложения (msvc 2008).Когда они делятся на ноль, они ведут себя по-разному.Мои вопросы приведены ниже.

a) В одном приложении результат деления на ноль отображается как 1. # INF000000000000 как отладчик.
Printf "% 4.1f" печатает его как "1. $".

b) В другом приложении результат деления на ноль 9.2559631349317831e + 061 в отладчике.
Printf "% 4.1f" печатает его как "-1. $".

  1. Why ни одно из приложений не имеет исключения или не сообщает о делении на ноль?
    Разве исключение / сигнал не является развлечением по умолчанию?

  2. Каковы define имена для двух констант выше?

  3. Как правило, если я проверю знаменатель == 0 перед div, то какое значение define я должен использовать для фиктивного результата?DBL_MIN хорошо?Я обнаружил, что значение NaN не равно.

  4. Могу ли я указать stdio, как отформатировать одно конкретное двойное значение в виде строки символов, которую я говорю?Я понимаю, что это слишком много, чтобы спросить.Но было бы неплохо сказать stdio напечатать, скажем, «n / a» для vaues DBL_MIN, например, в моем приложении.

  5. Как мне подойти, для лучшей переносимости, деленияи по результатам печати?Под печатью я подразумеваю «напечатать число как« н / д », если оно является результатом деления на ноль».
    Что мне здесь непонятно, как мне представить результат деления на ноль в одной двойной,портативным способом.

  6. Почему два разных результата?Это параметры компилятора?

Компилятор - C ++, но очень похож на C. Спасибо.

1 Ответ

1 голос
/ 09 апреля 2011

При делении с плавающей точкой на ноль, результат должен быть бесконечность (представлен специальным битовым шаблоном).

Моя догадка заключается в том, что второе приложение фактически не выполняет деление на ноль, а скорее деление с действительно небольшим числом. Вы можете проверить это, проверив базовое представление, либо в отладчике, либо в результате трассировки (вы можете получить к нему доступ, поместив его в объединение типа с плавающей запятой и целого числа того же размера). Обратите внимание, что простая печать может не показать этого, поскольку алгоритм печати иногда печатает действительно маленькие числа как ноль.

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