В документации 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 и по поводу игнорирования наименьшего числа в диапазоне целых чисел?