OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 12:16

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




Начать новую тему Ответить на тему  [ Сообщений: 135 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 21 Июль, 2009 15:14 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Сори... недописал

SymWCh(SYSTEM.VAL(CHAR, x[i]));

функция SymWCh записывает байт в файл...

То есть желательно узнать внутреннее представление массива х после передачи в него значения типа REAL

Код:
  PROCEDURE SymWCh*(ch: CHAR);
    VAR ch1: CHAR;
  BEGIN
    tmpBuf[tmpLen]:=ch;
    INC(tmpLen);
  END SymWCh;

  PROCEDURE SymWBytes(VAR x: ARRAY OF SYSTEM.BYTE; len: INTEGER);
    VAR i: INTEGER;
  BEGIN i:=0;
    WHILE i < len DO SymWCh(SYSTEM.VAL(CHAR, x[i])); INC(i) END
  END SymWBytes;

  PROCEDURE SymWLReal*(lr: LONGREAL);
  BEGIN
    SymWBytes(lr, LRealSize)
  END SymWLReal;


или что окажется в tmpBuf после вышеуказанных процедур при вызове такого

SymWLReal*(123.456789);

А еще луче кинтесь в меня реализацией модуля SYSTEM из оберона...
Типа в каком модуле оно находится?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 15:53 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
sa_t_an писал(а):
что окажется в tmpBuf после вышеуказанных процедур при вызове такого: SymWLReal*(123.456789);
Там окажется копия двоичного представления числа, младшим байтом вперёд. Знечения будут такие: [11, 11, 238, 7, 60, 221, 94, 64].
sa_t_an писал(а):
А еще луче кинтесь в меня реализацией модуля SYSTEM из оберона...
Типа в каком модуле оно находится?
Где-то в компиляторе, точнее не знаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 18:01 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
А разве компилятор не выдаст ошибку? Или LONGREAL эквивалентен ARRAY OF SYSTEM.BYTE?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 18:50 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
ARRAY OF SYSTEM.BYTE эквивалентен любой переменной
низкоуровневая штука.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 20:01 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Токда более сложный вопрос, какой float point формат в Обероне?

А луче накидайте (кто Д'Артаньян конешно) функцию преобразования REAL в двоичное представление...

Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 20:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Формат должен.. бы.. быть стандартный сопроцессоровский, как в IEEE указано.
(Правда, там веселуха с тем, что Интели ввели не-IEEE-шное расширение - регистры имеют большую точность, чем значения в памяти. Отсюда, если писать программу без учёта этого, возможна наоборот потеря точности при перетаскивании из памяти в регистр, т.е. нарушение IEEE).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 20:45 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
sa_t_an писал(а):
Токда более сложный вопрос, какой float point формат в Обероне?
Такой же как и в большинстве языков -- IEEE 754.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 20:49 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
ХМ... Но я воще что бы не тянуть кота за ынц-ынц все таки решил оставить стандартный POW! генератор символьных файлов...

Вообщем не у кого готовой нет фукции на Oberon или Delphi для конвертации в IEEE-754 и обратно???
А то так в лом писать самому... :D

http://students.uni-vologda.ac.ru/pages ... /index.htm - читал отдыхал... :D


Последний раз редактировалось sa_t_an Вторник, 21 Июль, 2009 20:51, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 20:50 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
sa_t_an писал(а):
Токда более сложный вопрос, какой float point формат в Обероне?
Такой же, какой у Double в Delphi 7.
sa_t_an писал(а):
А луче накидайте (кто Д'Артаньян конешно) функцию преобразования REAL в двоичное представление...
Куда уж ещё двоичнее-то? 8-байтовое число с плавающей точкой в стандартном процессорном формате. Чего ещё надо-то?
REAL - 4 байта
LONGREAL - 8 байт (Delphi = Double)
LONGLONGREAL - 16 байт (Delphi = Extended)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 20:52 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
sa_t_an писал(а):
Вообщем не у кого готовой нет фукции на Oberon или Delphi для конвертации в IEEE-754 и обратно???
А то так в лом писать самому... :D
Ещё раз для прапорщиков: ничего конвертировать не надо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 20:54 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Александр Ильин писал(а):
Куда уж ещё двоичнее-то?


Ну как сказать? Для любого компилера 33.12345678 не совсем двоичное - для начала его надо перевести в IEEE-754 float point формат (что бы сохранять допустим в файл)
А при вызове наоборот конвертнуть назад...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 21:05 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
В Delphi -- StrToFloat и FloatToStr.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 21:31 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
PGR писал(а):
В Delphi -- StrToFloat и FloatToStr.


Вот уже шутки пошли - это хорошо... :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 22:37 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Александр Ильин писал(а):
LONGLONGREAL - 16 байт (Delphi = Extended)

Только, не 16, а 10 байт.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Июль, 2009 01:08 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Код:
Ещё раз для прапорщиков: ничего конвертировать не надо.


Покажите генералы функцию на паскале что бы получить копию двоичного представления числа, младшим байтом вперёд типа REAL без конвертирования в IEEE формат.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Июль, 2009 05:18 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Борис Рюмшин писал(а):
Только, не 16, а 10 байт.
Ой, и правда. : )
Мне 16 показалось более логичным : )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Июль, 2009 05:23 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
sa_t_an писал(а):
Покажите генералы функцию на паскале что бы получить копию двоичного представления числа, младшим байтом вперёд типа REAL без конвертирования в IEEE формат.
У вас же есть код на Обероне. Вам на Delphi перевести его? Или вам что-то другое надо? Никак в толк не возьму, что вам нужно. Объясните подробно, а то у меня такое впечатление, что вы чего-то не понимаете, а чего - не ясно. Если подробно распишете, что вам нужно, то всё сразу встанет на свои места.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Июль, 2009 12:37 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Ну ишо раз поясняю...

Я ПИШУ ОБЕРОН КОМПИЛЯТОР НА DELPHI ПОЭТОМУ НЕКОТОРЫЕ ФУНКЦИИ МНЕ ПРОСТО НЕОБХОДИМО ПЕРЕПИСАТЬ...

КАК ПРИМЕР КОНСТРУКЦИЯ ВИДА VAR X ARRAY OF SYSTEM.BYTE ПЕРЕХОДИТ В КОД

Код:
FUNCTION RealToIEEE(CONST r:Single): Integer;
VAR
  Overlay: Integer ABSOLUTE r;
BEGIN
  RESULT := Overlay;
END;


для типа REAL...

Ну нету в DELPHI таких конструкций, нету типа SET, нету оператора SHORT... НЕТУ...

Код:
что вы чего-то не понимаете


Единственное что я не понимаю, так что я тут ваще делаю то?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Июль, 2009 13:22 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
sa_t_an писал(а):
Код:
FUNCTION RealToIEEE(CONST r:Single): Integer;
VAR
  Overlay: Integer ABSOLUTE r;
BEGIN
  RESULT := Overlay;
END;


для типа REAL...
Представить побитно число с плавающей точкой в виде целого? Как-то так
Код:
type
  SingleRec = record
    case Byte of
      1: (i: Integer);
      2: (r: Single);
  end;
  DoubleRec = record
    case Byte of
      1: (i: Int64);
      2: (r: Double);
  end;

function SingleAsInt(r: Single): Integer;
begin
  Result := SingleRec(r).i;
end;

function DoubleAsInt(r: Double): Int64;
begin
  Result := DoubleRec(r).i;
end;
Только зачем вам это нужно -- не понимаю...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Июль, 2009 13:32 

Зарегистрирован: Суббота, 07 Февраль, 2009 19:25
Сообщения: 8
sa_t_an писал(а):
Вопрос почти предпоследний :D
Имеем функцию

Код:
  PROCEDURE SymWBytes(VAR x: ARRAY OF SYSTEM.BYTE; len: INTEGER);
    VAR i: INTEGER;
  BEGIN i:=0;
    WHILE i < len DO SYSTEM.VAL(CHAR, x[i]); INC(i) END
  END SymWBytes;


Так вот что будет в -> х после вызова таким образом
lr:= 12345.123456789;
SymWBytes(lr, 8 );

Тока кому не влом, если можно побайтно...

в дельфи SymWBytes = blockwrite

blockwrite(f1, x, len);
f1 - дескриптор файла, пример
Код:
var
  f1 : file of byte;
  lr  : double;
begin
  lr:= 12345.123456789;

  assignfile(f1, "test.txt");
  rewrite(f1);

  blockwrite(f1, lr, 8);

  closefile(f1);
end.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 135 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

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


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

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


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

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