Случайно наткнулся на одну статью (
"Безвременно как бесконечность") и попробовал такой код:
Код:
MODULE TestZeroDiv;
IMPORT Log := StdLog;
PROCEDURE RealDiv*;
VAR f, zero: REAL;
BEGIN
zero := 0.0;
f := 123.0 / zero;
Log.Real(f)
END RealDiv;
PROCEDURE IntDiv*;
VAR i, zero: INTEGER;
BEGIN
zero := 0;
i := 123 DIV zero;
Log.Int(i)
END IntDiv;
PROCEDURE Do*;
BEGIN
RealDiv;
IntDiv
END Do;
END TestZeroDiv.
TestZeroDiv.Do
Компилятор ББ сообщает уже на этапе компиляции о попытке деления на ноль, если указывать ноль константой.
При делении вещественных чисел на ноль получаем бесконечность (Inf), как и описано в стандарте IEEE (
IEEE 754-1985). А при целочисленном делении на ноль срабатывает капкан.
Надеюсь, будет полезно всем.