OberonCore
https://forum.oberoncore.ru/

Деление на ноль и бесконечность
https://forum.oberoncore.ru/viewtopic.php?f=29&t=2725
Страница 1 из 1

Автор:  Роман М. [ Среда, 30 Июнь, 2010 14:31 ]
Заголовок сообщения:  Деление на ноль и бесконечность

Случайно наткнулся на одну статью ("Безвременно как бесконечность") и попробовал такой код:
Код:
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). А при целочисленном делении на ноль срабатывает капкан.

Надеюсь, будет полезно всем.

Автор:  Евгений Темиргалеев [ Среда, 30 Июнь, 2010 14:38 ]
Заголовок сообщения:  Re: Деление на ноль и бесконечность

Language Report писал(а):
8.2.2 Arithmetic operators
...
If the result of a real operation is too large to be represented as a real number, it is changed to the predeclared value INF with the same sign as the original result. Note that this also applies to 1.0/0.0, but not to 0.0/0.0 which has no defined result at all and leads to a run-time error...

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/