Ведь SHORTREAL - это 32 бита, а LONGINT - 64. Значит, SHORTREAL не позволяет различать всевозможные LONGINT, некоторые сольются. Пример:

## Код:
```
MODULE тыды; IMPORT Out;

PROCEDURE щ*;
VAR ц1,ц2:LONGINT;
VAR д1,д2:SHORTREAL;
BEGIN
 ц1 := MAX(LONGINT);
 ц2 := MAX(LONGINT)-100500;
 д1 := ц1;
 д2 := ц2;
 Out.Real(д1,100);Out.Ln;
 Out.Real(д2,100);Out.Ln;
 IF д1 = д2 THEN
  Out.String("Опаньки!");
 END
END щ;
END тыды.

(* 
^Q тыды.щ
*)
```

В стандарте написано:
> -- Цитата:
> Типы 4-7 суть целые типы, типы 8 и 9 суть вещественные типы, а вместе они называются числовыми типами. Они образуют иерархию; старший тип включает младший (включение касается значений):	REAL >=  SHORTREAL  >=  LONGINT  >=  INTEGER  >=  SHORTINT >=  BYTE
Ну, "включение касается значений" - это весьма правильно написано. Включение не обязывает значения различаться. В этом смысле /dev/null способен вместить всёНо уважения такой абзац, прямо скажем, большого не вызывает. Т.е. конечно, понятно, что имелся в виду диапазон. Но тогда так и надо было написать. И в этом случае нет никакой иерархии, т.к. SHORTREAL не старше, чем LONGINT. Понятие подтипа и иерархии типов описано Лисковой. Конкретное число LONGINT не является числом с плавающей точкой - не может быть представлено таковым без потери информации. Я бы даже сказал, что возможность неявного преобразования от LONGINT к SHORTREAL вызывает большое подозрение с точки зрения надёжности.