В документации BlackBox в разделе Language Report написано:
Цитата:
Types 4 to 7 are integer types, types 8 and 9 are real types, and together they are called numeric types. They form a hierarchy; the larger type includes (the values of) the smaller type:
	REAL  >=  SHORTREAL  >=  LONGINT  >=  INTEGER
		>=  SHORTINT >= BYTE
Решил проверить, действительно ли SHORTREAL включает все значения из LONGINT.
Написал небольшой тест:
Код:
MODULE MyTest;
   IMPORT Log;
   PROCEDURE Do*;
   VAR x, y, z: LONGINT;
      f: REAL;
   BEGIN
      x := -9223372036854775807;
      f := x;
      y := ENTIER(f);
      IF x = y THEN Log.String("Equal");
      ELSE Log.String("Not equal");
      END;
      Log.Ln;
      z := y - x;
      Log.Int(SHORT(z)); Log.Ln;
   END Do;
END MyTest.
Оказалось, что после обратного преобразования вещественного числа в целое, то результат уже другой.
Еще одна проблемка заключается в том, что в коде нельзя написать число -9223372036854775808, хотя это число входит в диапазон LONGINT. Почему это происходит понятно, так как сканер отдельно считывает знак "-" и отдельно число считывает в переменную типа LONGINT, но так как положительное число 9223372036854775808 не входит в диапазон LONGINT, то возникает ошибка. Скорее всего это было сделано для упрощения, но думаю, что не надо забывать и про вторую часть высказывания "Make it as simple as possible, BUT NOT SIMPLE".
Кто что думает по поводу несовместимости SHORTREAL и LONGINT и по поводу игнорирования наименьшего числа в диапазоне целых чисел?