OberonCore
https://forum.oberoncore.ru/

Потери информации при присваивании
https://forum.oberoncore.ru/viewtopic.php?f=30&t=901
Страница 1 из 1

Автор:  GameHunter [ Четверг, 06 Март, 2008 16:35 ]
Заголовок сообщения:  Потери информации при присваивании

Уважаемые специалисты,

В обероне-2, как известно, можно присваивать значение более узкого численного типа переменной более широкого типа в соответствии с правилом:

INTEGER C LONGINT C REAL C LONGREAL

Запрет на присваивание в обратную сторону аргументируется потерей информации.
На практике же это приводит к тому, что 32-разрядное целое мржно присвоить 4-байтной вещественной переменной, а такое присваивание идёт с потерей точности.

Также потеря информации происходит при присваивании записи значения её расширения.

Решены ли эти аопросы в компонентном паскале?

С уважением,
GH.

Автор:  Борис Рюмшин [ Четверг, 06 Март, 2008 18:30 ]
Заголовок сообщения:  Re: Потери информации при присваивании

В КП REAL то же, что в Обероне LONGREAL - (REAL 64 bit IEEE).

Хотя в сообщении записано всё тоже правило:
REAL >= SHORTREAL >= LONGINT >= INTEGER >= SHORTINT >= BYTE

Автор:  Борис Рюмшин [ Четверг, 06 Март, 2008 18:34 ]
Заголовок сообщения:  Re: Потери информации при присваивании

Потеря информации действительно возможна, однако при преобразовании нет переполнения. :mrgreen:

Автор:  Valery Solovey [ Четверг, 06 Март, 2008 19:02 ]
Заголовок сообщения:  Re: Потери информации при присваивании

Не факт, что увеличение разрядности переменных для хранения вещественных значений (SHORTREAL) исключит потерю точности. Вполне возможно, что у REAL те же проблемы.

Автор:  Евгений Темиргалеев [ Пятница, 07 Март, 2008 09:35 ]
Заголовок сообщения:  Re: Потери информации при присваивании

GameHunter писал(а):
На практике же это приводит к тому, что 32-разрядное целое мржно присвоить 4-байтной вещественной переменной, а такое присваивание идёт с потерей точности.

Округление. Теряем наименее значащие разряды, а не все (в тех случаях, когда запрещено).
GameHunter писал(а):
Также потеря информации происходит при присваивании записи значения её расширения.

Присваивать можно только нерасширяемые записи.
Language Report писал(а):
Assignment compatible
An expression e of type Te is assignment compatible with a variable v of type Tv if one of the following conditions hold:
1. Te and Tv are equal and neither abstract, extensible, or limited record nor open array types;
...

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/