OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 16 Декабрь, 2018 02:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Почему SHORTREAL >= LONGINT ?
СообщениеДобавлено: Среда, 10 Октябрь, 2018 16:26 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 261
Ведь 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 способен вместить всё :mrgreen: Но уважения такой абзац, прямо скажем, большого не вызывает. Т.е. конечно, понятно, что имелся в виду диапазон. Но тогда так и надо было написать. И в этом случае нет никакой иерархии, т.к. SHORTREAL не старше, чем LONGINT. Понятие подтипа и иерархии типов описано Лисковой. Конкретное число LONGINT не является числом с плавающей точкой - не может быть представлено таковым без потери информации. Я бы даже сказал, что возможность неявного преобразования от LONGINT к SHORTREAL вызывает большое подозрение с точки зрения надёжности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему SHORTREAL >= LONGINT ?
СообщениеДобавлено: Среда, 10 Октябрь, 2018 18:52 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 742
Откуда: Киев
Тут вопрос, почему SHORTREAL >= LONGINT (r32 >= i64) вызывает вопросы, а REAL >= LONGINT (r64 >= i64), судя по сообщению, не вызывает.
В целом, учёт всех особенностей IEEE 754 в ЯВУ дело непростое, вот и делаются подобные приближения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему SHORTREAL >= LONGINT ?
СообщениеДобавлено: Среда, 10 Октябрь, 2018 20:47 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 261
> Тут вопрос, почему SHORTREAL >= LONGINT (r32 >= i64) вызывает вопросы, а REAL >= LONGINT (r64 >= i64), судя по сообщению, не вызывает.
И так хорошо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему SHORTREAL >= LONGINT ?
СообщениеДобавлено: Четверг, 11 Октябрь, 2018 11:33 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9062
Откуда: Россия, Орёл
Видимо, речь идёт о диапазонном включении. От наименьшего до наибольшего на числовой прямой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему SHORTREAL >= LONGINT ?
СообщениеДобавлено: Вторник, 23 Октябрь, 2018 00:00 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1094
Откуда: СССР v2.0 rc 1
Если рассуждать строго, то SHORTREAL в представлении IEEE 754 конечно нельзя сравнивать с LONGINT. Чем выше показатель экспоненты -- тем больше "дырки" между двумя близлежащими точными значениями у вещественных. Если построить график представимости чисел, то он будет похож на расчёску с зубьями, причём зубья будут всё реже в сторону увеличения длины такой расчёски. А представление целых --будет просто прямая линия.
Но по контексту Илья, конечно, прав. Речь идёт про диапазон охвата чисел.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB