Коллеги,
Код:
PROCEDURE Really*;
VAR s: SHORTREAL; r: REAL;
BEGIN s := -0.4523987; r := -0.4523987; Log.Real(s); Log.Char(' '); Log.Real(r)
END Really;
(* резульат: -0.4523986876010895 -0.4523987 *)
Как я понял, -0.4523987 не может быть выражено в 32-разрядном формате.
В этом случае я бы ожидал от компилятора сообщения об ошибке. Подобно тому, что если i: INTEGER, то i := MAX(INTEGER) + 1 - это ошибка; если sh: SHORTCHAR, то sh := "Я" - тоже ошибка.
Я почти не имею опыта работы с действительными числами. Возможно, я не прав?
В Сообщении про действительные литералы сказано:
Language Report, 3. Vocabulary and representation писал(а):
A real number is always of type REAL.