Почему нет ошибки при делении на ноль?

Вариант решения уравнения ax+b=0:

var a,b:integer; x:real; begin readln (a,b); x:=-b/a; if (a<>0) then writeln(x) else if (b<>0) then writeln(‘корней нет’) else writeln (‘любое число’) end.

Почему при выполнении в строке 5 не возникает ошибки при задании a=0

  1. С какими данными Вы выполняли решение?
  2. На платформе .NET при делении вещественного числа на ноль переполнение возникает, но перехватывается и обрабатывается средой исполнения. В PascalABC.NET результатом обработки будет получения значения, которое он скромно называет " - infinity "

/ - это вещественное деление. Вещественное деление на 0 не порождает исключения, его результат - это особое значение Infinity или NaN, если делить 0 на 0. Для целочисленного деления используйте div. “4 div 0” должно вызвать исключение.

  1. При задании для a и b целых значений

Всем спасибо, понятно. Странная интерпретация при делении на 0 (ИМХО)

Это стандарт двоичной арифметики с плавающей точкой IEEE 754:

http://www.softelectro.ru/ieee754.html

Он принят в 1985 году.

Вот цитата из последней статьи:

Большинство современных микропроцессоров изготовляются с аппаратной реализацией представления вещественных переменных в формате IEEE754. Язык программирования и программист не могут изменить эту ситуацию, иного преставления вещественного числа в микропроцессоре не существует.

До этого в древних системах типа Turbo Pascal действительно происходила ошибка времени выполнения, но эти времена давно ушли