1. Заголовок или название темы должно быть информативным 2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE] 3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора. 5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM! 6. Проверяйте программы перед тем, как выложить их на форум!!
Создаю тут, потому что мне кажется, что это относится к асму.
{$APPTYPE CONSOLE}
var a: extended; begin a := sqrt(-1); writeln(a); readln; end.
Я хочу, чтобы это программа вывела на экран NAN. Меня вполне устраивает значение "не число". Неопределённый результат - тоже результат, что такого-то. Но программа вылетает. Причём вылет происходит не в момент вычисления корня, а при выгрузке результата в память. Что надо сделать, чтобы программа не вылетала? (Вариант writeln('NAN') - не предлагать).
а вот почему делить на ноль можно (и безо всякого исключения получить +inf или -inf, в зависимости от знака делимого)
Правда что-ли? А мужики-то не знают:
var a, b: extended; begin b := 0.0; a := -1.23;
a := a / b; writeln(a); readln; end.
Что будет выведено на печать? Что-нибудь ВООБЩЕ будет выведено? (если что, меня древние версии ПО мало интересуют, за заявлением "делить на 0 можно" стоит утверждение, что процессор в принципе не производит никаких исключительных действий, которые ловятся программой. Значит, я должен получить результат -inf, откомпилировав код ЛЮБОЙ версией Дельфи и запустив программу. Договорились. Стандартные настройки, Дельфи 2009/2010. Вопрос - прежний, что я увижу на экране?)
А вот так:
uses math, sysutils; var a, b: extended; begin b := 0.0; a := -1.23;
try a := a / b; except on E: Exception do begin writeln(e.ClassName); end; end;
writeln(a); readln; end.
? Что я теперь увижу? (если "без исключений" - значит, я не должен видеть ничего, кроме как -inf?)