OberonCore https://forum.oberoncore.ru/ |
|
Разработка IDE для Оберон/Оберон-2 https://forum.oberoncore.ru/viewtopic.php?f=30&t=1709 |
Страница 5 из 7 |
Автор: | Александр Ильин [ Среда, 22 Июль, 2009 13:42 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Это вам нужно, что ли? Код: procedure RealToBytes (const val: Double; out arr: array of Byte); begin Move (val, arr, SizeOf (val)); end; procedure TForm1.Button1Click(Sender: TObject); var d: Double; a: array [0..SizeOf (Double) - 1] of Byte; begin d := 123.456789; RealToBytes (d, a); end; sa_t_an писал(а): Ну как сказать? Для любого компилера 33.12345678 не совсем двоичное - для начала его надо перевести в IEEE-754 float point формат (что бы сохранять допустим в файл) Ерунду какую-то напридумывали себе. Прошу же разобраться в проблеме, подробно описать. Нет времени сесть подумать?А при вызове наоборот конвертнуть назад... sa_t_an писал(а): Единственное что я не понимаю, так что я тут ваще делаю то? Тут вы себе льстите. : )
|
Автор: | sa_t_an [ Среда, 22 Июль, 2009 14:16 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Код: Тут вы себе льстите Ну тут скорее вам, если б себе я бы уже давно свалил... Мне просто интересен уровень ваш (вернее отсутствие) Итак в сотый раз пишу... Я делаю компилятор(вернее сделал уж почти) на делфи(пишу на русском) совместимый с компилятором оберон... Совместимость включает в себя создание символьных файлов ПОЛНОСТЬЮ совместимых с символьными файлами оберон компилятора POW! Так вот функция двумя постами выше(моя) дает точное представление числа в формате IEEE как в оберон компиляторе. Теперь вопрос к мозговому центру профессорского уровня... Вы вообще представляете ЧТО ДЕЛАЕТ ВАША функция, или вам просто интересно писать лишь бы показать свой уровень? Для танкистов попробуйте сделать аналог var x: system.byte на дельфи и сравните результат в обероне и в вашей функции, после этого (и только после этого) прошу отписываться и показывать величину своей образованности!!! |
Автор: | sdimitry85 [ Среда, 22 Июль, 2009 14:45 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
sa_t_an писал(а): Для танкистов попробуйте сделать аналог var x: system.byte на дельфи и сравните результат в обероне и в вашей функции, после этого (и только после этого) прошу отписываться и показывать величину своей образованности!!! разница действительна имеется, ввидимо из-за потери точности при преобразовании из строки в вещественное число... но это не смертельно, вы же перетаскиваете компилятор на паскаль и дальше развитие будит происходить на паскале и в данном случае полная бинарная совместимость в вещественных числах не нужна... вот что у меня получилось на дельфи и pow код на обероне Код: MODULE test; IMPORT File; VAR f1 : LONGINT; lr : LONGREAL; BEGIN f1 := File.Create("oberon"); lr := 12345.123456789; File.Write(f1, lr, 8); File.Close(f1); END test. код на дельфи Код: {$apptype console} var f1 : file of byte; lr, lr2 : double; begin lr:= 12345.123456789; assignfile(f1, 'delfi'); rewrite(f1); blockwrite(f1, lr, 8); closefile(f1); assignfile(f1, 'oberon'); reset(f1); blockread(f1, lr2, 8); closefile(f1); Writeln('delfi lr = ', lr, #10#13'pow oberon lr = ', lr2); Writeln; Writeln('delfi lr = ', lr:0:20, #10#13'pow oberon lr = ', lr2:0:20); end. содержание файлов Код: oberon: 00 00 00 C0 8F 1C C8 40 delfi: 9D 9B 6E CD 8F 1C C8 40 результат работы программы на дельфи: Код: H:\Pow!\op3>delfi.exe delfi lr = 1.23451234567890E+0004 pow oberon lr = 1.23451230468750E+0004 delfi lr = 12345.12345678900056000000 pow oberon lr = 12345.12304687500000000000 видно что у pow точность хуже, а у дельфи лучше поэтому при переписи компиля на дельфи точность повысится |
Автор: | Александр Ильин [ Среда, 22 Июль, 2009 14:53 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
sa_t_an писал(а): попробуйте сделать аналог var x: system.byte на дельфи и сравните результат в обероне и в вашей функции Именно так я и поступил. Реализовал на XDS Oberon, реализовал на Delphi 7, сравнил, и после этого написал.sa_t_an писал(а): Для танкистов ... после этого (и только после этого) прошу отписываться и показывать величину своей образованности!!! Если вас не устраивает результат, значит вы неправильно поставили задачу. А вообще, с таким отношением отправляйтесь-ка вы в игнор.
|
Автор: | Александр Ильин [ Среда, 22 Июль, 2009 14:55 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
sdimitry85 писал(а): delfi lr = 12345.12345678900056000000 Ничего себе, можно пренебречь четвёртым знаком после запятой? Скорее уж, можно пренебречь реализацей POW!
pow oberon lr = 12345.12304687500000000000 имхо разницей в точности можно пренебречь |
Автор: | sdimitry85 [ Среда, 22 Июль, 2009 14:58 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Александр Ильин писал(а): sdimitry85 писал(а): delfi lr = 12345.12345678900056000000 Ничего себе, можно пренебречь четвёртым знаком после запятой? Скорее уж, можно пренебречь реализацей POW!pow oberon lr = 12345.12304687500000000000 имхо разницей в точности можно пренебречь я хотел сказать что не нужно все ошибки pow повторять, оттого что компилятор на паскале будит давать более точные значения он только выйграет... |
Автор: | Comdiv [ Среда, 22 Июль, 2009 16:37 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Вы очень путано изъясняетесь, поэтому и возникает такое недопонимание с участниками форума. Судя по результатам вывода программы, представленной sdimitry85, между представлением REAL в Pow и в Delphi нет разницы. Зато есть разница перевода десятичного представления числа в стандарт IEEE - Pow делает это значительно менее точно, чем Delphi. Устранение такой неточности на совместимость не повлияет. |
Автор: | sa_t_an [ Среда, 22 Июль, 2009 17:03 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Оч хорошо, теперь о вопросах Цитирую 2 страничную давность Цитата: 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; Ответ Цитата: Я что-то вообще не вижу, чтобы эта процедура что-то делала с x Куда проще??? Я <удалено модератором> не спрашиваю что делает ФУНКЦИЯ а спрашиваю что будет в х. Мне еще тогда хотелось тыкнуть для лучей видимости, но я сдержался PROCEDURE SymWBytes(VAR x: ARRAY OF SYSTEM.BYTE; len: INTEGER); Типа это приблуда так просто, для красоты что ли? Но потом Цитата: Ещё раз для прапорщиков: ничего конвертировать не надо Цитата: Вам на Delphi перевести его? Потом куча бреда с подтверждением своей значимости Цитата: Нет времени сесть подумать? И только после этого адекватный ответ sdimitry85 Так вот у меня и появляются сомнения, когда я почти в каждом топике пишу, что перевожу код на PASCAL и через 5 страниц глубокомысленных завсегдатаев форума вдруг осеняет - вроде - Ааааааа , <удалено модератором>, да ты на PASCALе пишишь, а чо ж сразу не сказал???-- <удалено модератором>как я могу серьезно относиться к ответам??? Ну довайте я буду начинать топики с фразы Я ПИШУ КОМПИЛЯТОР ОБЕРОНА НА PASCAL-е ... |
Автор: | slava [ Среда, 22 Июль, 2009 18:17 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Александр Ильин писал(а): sdimitry85 писал(а): delfi lr = 12345.12345678900056000000 Ничего себе, можно пренебречь четвёртым знаком после запятой? Скорее уж, можно пренебречь реализацей POW!pow oberon lr = 12345.12304687500000000000 имхо разницей в точности можно пренебречь Тип (LONG)REAL работает с вещественными с плавающей запятой, а не с фиксированной. И да, во многих задачах 9-ым знаком можно пренебречь. Хотя странно, что простейшее преобразование в LONGREAL приводит к такой ошибке. Для LONGREAL нормальным является удерживать знаков 15. |
Автор: | Евгений Темиргалеев [ Среда, 22 Июль, 2009 21:57 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Обсуждение аватар перенесено: viewtopic.php?p=32366#p32366 |
Автор: | Иван Горячев [ Четверг, 23 Июль, 2009 01:35 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
sa_t_an писал(а): Цитирую 2 страничную давность Код: 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; Ответ Цитата: Я что-то вообще не вижу, чтобы эта процедура что-то делала с x Мне еще тогда хотелось тыкнуть для лучей видимости, но я сдержался PROCEDURE SymWBytes(VAR x: ARRAY OF SYSTEM.BYTE; len: INTEGER); Типа это приблуда так просто, для красоты что ли? Satan, если Вы спрашиваете - приводите хотя бы корректные примеры, а не наезжайте на тех, кто Вам отвечает. Приведённый код действительно ничего не делает с x. Он вообще ничего не делает! По одной простой причине - в оригинале он выглядит так: Код: 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; Разницу видите? А VAR стоит там исключительно для того, чтобы не копировать весь массив x при вызове функции. Поскольку в стандартном Обероне IN нету |
Автор: | Александр Ильин [ Четверг, 23 Июль, 2009 03:45 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Иван Горячев писал(а): Satan, если Вы спрашиваете - приводите хотя бы корректные примеры, а не наезжайте на тех, кто Вам отвечает. Приведённый код действительно ничего не делает с x. Он вообще ничего не делает! Спасибо, Иван. Он спросил "Так вот что будет в -> х после вызова таким образом..." (выделено мной), что на редкость двусмысленно. Я его вопрос прочитал так: "Как изменится содержимое переменной x после завершения работы процедуры". А он, как выяснилось лишь через страницу уточнений, хотел спросить, "что будет передано в процедуру с таким паметром при её вызове". Тонкость, как видно, в использовании правильного предлога. Выводы пусть каждый сделает сам.Всем привет из Швейцарии, кстати! : ) |
Автор: | sa_t_an [ Четверг, 23 Июль, 2009 04:04 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Вот именно, я спросил что будет в х.... Теперь покажу ход моих мыслей, если бы я отвечал на вопрос... Первое - отмотал бы на 2 странички назад 5-2=3 и почитал бы топик. увидел бы такое Цитата: lr:= 12345.123456789; SymWBytes(lr, 8 ); и подумал бы... Ага, раз lr передается по ссылке а не по значению значит в х будет область памяти где расположена lr, но так как она в представлении МАШКОДА+IEEE стандарт, то в x окажется кусок памяти длинной REAL(или LONGREAL) числа, то есть по просту то, что мы видим в HEX редакторе. Значит ARRAY OF SYSTEM.BYTE это простой массив в который и передается побайтно это значение... плюс добавил бы функцию которая это же делает на Delphi... Но это если бы отвечал я... А у нас получилось что я тупой, дибил, не пойму что хочу и т.д. Ладно хоть как сишники мануалы долбить не отослали (хотя хрен редьки не слаще) И по моему для вопроса абсолютно не нужна функция, а достаточно заголовка что бы дотюмкать... Так что это не наезд, а вполне нормальная защитная реакция. |
Автор: | Иван Горячев [ Четверг, 23 Июль, 2009 04:19 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
sa_t_an писал(а): И по моему для вопроса абсолютно не нужна функция, а достаточно заголовка что бы дотюмкать... Так что это не наезд, а вполне нормальная защитная реакция. Вот именно, сама функция не нужна. Но Вы её привели, причём зачем-то немножко поправили. Ну да ладно, проехали. А что касается точности REALов, то я сравнил процедуры OPS.Number из Pow! и DevCPS.Number из ББ. В ББ как раз при чтении вещественных происходят некие дополнительные телодвижения, отсутствующие в Pow. Может быть точность теряется именно здесь, ещё до компиляции? Александр Ильин писал(а): Всем привет из Швейцарии, кстати! : ) Ночные бдения? |
Автор: | sa_t_an [ Четверг, 23 Июль, 2009 04:53 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Там скорее всего неверная реализация стандарта IEEE(она ведь закрытая до времени была)... У меня на проверке некоторые биты не совпадали, я промучился часа два, потом взял исходные проверенные данные и по ним понял, что что то не то, поэтому и закрались кой какие сомнения, но во общем это дело уже прошлое, просто на будущее вдруг кто столкнется с неточностями в расчетах и т.д... |
Автор: | Иван Горячев [ Четверг, 23 Июль, 2009 05:54 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
sa_t_an писал(а): Вот смотрим функцию IEEE Код: FUNCTION RealToIEEE(CONST r:Single): Integer; VAR Overlay: Integer ABSOLUTE r; BEGIN RESULT := Overlay; END; FUNCTION IEEEToReal(hex: integer): Single; VAR d : Single; Overlay: ARRAY[1..2] OF word ABSOLUTE d; BEGIN Overlay[1] := Hi(hex)*$100+Lo(hex); hex:= hex shr 16; Overlay[2] := Hi(hex)*$100+Lo(hex); RESULT := d; END; Вот это полное преобразование в стандарт и обратно... Кстати, я не понял. Если мы из reala в integer перегоняем простым проецированием, то зачем нам в обратную сторону пляски с бубном? На мой любительский взгляд либо оба преобразования должны идти через absolute, либо оба - через вот эти вот сложения и умножения. |
Автор: | Geniepro [ Четверг, 23 Июль, 2009 07:28 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Александр Ильин писал(а): sdimitry85 писал(а): delfi lr = 12345.12345678900056000000 Ничего себе, можно пренебречь четвёртым знаком после запятой? Скорее уж, можно пренебречь реализацей POW!pow oberon lr = 12345.12304687500000000000 имхо разницей в точности можно пренебречь Похоже, в POW! LONGREAL на самом деле занимает 4 байта, а не 8... |
Автор: | sa_t_an [ Четверг, 23 Июль, 2009 15:00 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Цитата: либо оба - через вот эти вот сложения и умножения Это я просто по байтно проверял что там происходит и сравнивал с POW да так в тесте и оставил... И выходит что в POW длинна INTEGER - 2 LONGINT - 4 а SHORTINT - как бы соответствует байту... ну и т.д. А в других оберонах так же или несколько иначе? |
Автор: | sa_t_an [ Суббота, 25 Июль, 2009 00:59 ] |
Заголовок сообщения: | Re: Разработка IDE для Оберон/Оберон-2 |
Ну что, вижу интерес к теме все больше и больше со стороны обероновцев. Оно и понятно, получить Delphi Rad с синтаксисом Оберона кому ж не охото? Разве токма тому, кто жить не может без XDS среды разработки... Ну еще может быть БлэкБоксерам, завидую я им. Куда уж VS Studio или CodeGear RAD до ББ в плане удобства, юзабилити да и вообще в плане компиляции. Сравнивать их и ББ это равнозначно сравнению Notepad.exe и MS Word... Ну да речь не об этом. Осталься предпоследний вопрос и последний. Первый - а что же такое все таки SET с точки зрения Delphi. Тоесть на что он похож в представлении Делфийца. Луче в по байтном виде. Или кучу примеров на Обероне с типом SET (просто заголовки) И каким аналогом возможно его заменить (например массивом... и т.д.) И последний вопрос (тоже по байтный) что же все таки происходит с числом(типом) от функции SHORT Вроде если для LONGINT то было AABBCCDD а стало AABB или стало CCDD или стало BBCC Функцию (желательно битовую) живую для обозрения. После решения этих двух вопросов фронт-энд компилер будет готов. Вернее он уже готов и компилирует модули, экспортирует их (если в них не используются массивы(как вариант SET)) И останется уже вопрос эффективности компилирования модулей и их загрузка. То есть как лучше сделать список импорта рекурсивно, или сразу открыть все модули и распарсить секцию IMPORT, или отслеживать изменение исходного файла и записывать время изменения в него же.... |
Страница 5 из 7 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |