OberonCore
https://forum.oberoncore.ru/

Преобразование REAL переменной в INTEGER-значение
https://forum.oberoncore.ru/viewtopic.php?f=35&t=2583
Страница 1 из 1

Автор:  comm1x [ Четверг, 22 Апрель, 2010 16:17 ]
Заголовок сообщения:  Преобразование REAL переменной в INTEGER-значение

Доброго времени! Есть переменная Y: REAL и нужно ее отправить в функцию, которая просит INTEGER. Пытаюсь ее как-то конвертировать, все на что меня хватило:
Код:
s: INTEGER;
Y: REAL;
s:=Y DIV 1;

Ниче не работает, чувствую себя мегалузером. :cry:

Автор:  AVC [ Четверг, 22 Апрель, 2010 16:27 ]
Заголовок сообщения:  Re: DIV

Попробуйте так:s := SHORT(ENTIER(Y));

Автор:  Info21 [ Четверг, 22 Апрель, 2010 16:28 ]
Заголовок сообщения:  Re: DIV

s := SHORT(ENTIER(Y));

Автор:  Иван Кузьмицкий [ Четверг, 22 Апрель, 2010 18:02 ]
Заголовок сообщения:  Re: Преобразование REAL переменной в INTEGER-значение

В сообщении о языке есть такая фраза (п.6.1., Основные типы):

Цитата:
старший тип включает младший (включение касается значений):

REAL >= SHORTREAL >= LONGINT >= INTEGER >= SHORTINT >= BYTE


Кстати, там же, в п.6.1., есть прямая отсылка к нужной операции:

Цитата:
Основные типы обозначаются предопределенными идентификаторами. Соответствующие операции определены в 8.2, а предопределенные процедуры-функции — в 10.3.


Пришла мысль, что информационная насыщенность убывает по направлению от REAL к BYTE. То есть, тип INTEGER относительно типа REAL является менее насыщенным информационно, поэтому для преобразования старшего типа к младшему надо использовать спец. функцию ENTIER. Ну а в обратную сторону ENTIER не нужен.

Автор:  protector [ Понедельник, 03 Май, 2010 11:15 ]
Заголовок сообщения:  Re: Преобразование REAL переменной в INTEGER-значение

Не знаю как в КП, но по моему надо выделить биты мантиссы и экспоненты. Затем в зависимости от знака сдвинуть(вправо влево) мантиссу на число позиций указанных в экспоненте. В железе делал таким образом. Почитайте про формат плавающих чисел.

Хотя это вариант для того чтобы понять, что там внутри происходит. Так сказать вручную сделать

Автор:  Wlad [ Понедельник, 03 Май, 2010 12:09 ]
Заголовок сообщения:  Re: Преобразование REAL переменной в INTEGER-значение

Иван Кузьмицкий писал(а):
Пришла мысль, что информационная насыщенность убывает по направлению от REAL к BYTE. То есть, тип INTEGER относительно типа REAL является менее насыщенным информационно, поэтому для преобразования старшего типа к младшему надо использовать спец. функцию ENTIER. Ну а в обратную сторону ENTIER не нужен.

что вы подразумеваете под "насыщенностью"?
если - мощность множества, "вмещаемого" плавающим типом, то ПРИ РАВНОЙ РАЗРЯДНОСТИ представления, можно подобрать такое соотношение размеров полей плавающего типа, что "количество" вариантов комбинаций битов будет меньше аналогичного целого.
более того, некоторые целые просто нельзя будет представить соответствующим плавающим (с любой точностью приближения).

кстати, именно поэтому, во встроенных системах, при работе с оцифровкой измеряемых значений, предпочитают работать с "фиксированными точками". ведь, по сути, это - целые числа, с "подразумеваемым" масштабным множителем. при этом строго ограничивают (обуславливают "произволом") диапазон изменения величины и переносят его в диапазон представления целых по разрядности данной архитектуры.

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