Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 12:31

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 10:52 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
mOleg писал(а):
В данной Форт-системе есть ряд отличий и в том, как распознаются числа, и в том, какой формат записи чисел принят (по сравнению с ANSI94).


Несовсем понятно что получится если введена строка определяющая число больше чем двойное.
А также мне кажется ' это уже слишком,
: достаточно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 17:11 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вопрос писал(а):
Забыл спросить, чему в реальности соответствуют отрицательные шестнадцатеричные числа

:) вопрос логичный. Но иногда проще записать: -0x2 а не 0xFFFFFFE
вобщем дополнительный код
кстати, замечу, что запись -0x2 гораздо универсальнее, чем 0xFF... потому, что не завязана на разрядность числа

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 17:15 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
_Harry писал(а):
Несовсем понятно что получится если введена строка определяющая число больше чем двойное.

Источник: D:\fork\src-102\lib\util\envir.fts           
В строке: 35 :52
: MAX-UD ( --> dconst ) 0xFFFFFFFFFFFFFFFF
Число двойной длины!

вот так выглядит предупреждение :)

_Harry писал(а):
А также мне кажется ' это уже слишком, : достаточно.

они разные, если ты наберешь в строке:
123:456 то на стеке получишь два числа: 456 123
123`456 на стеке оставит два числа: 0 123456

однако, самое интересное происходит с отрицательными числами:
-123:456 = -456 -124
-123`456 = -1 -123456

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 11, 2009 17:45 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
mOleg писал(а):
Источник: D:\fork\src-102\lib\util\envir.fts

В строке: 35 :52

: MAX-UD ( --> dconst ) 0xFFFFFFFFFFFFFFFF

Число двойной длины!



вот так выглядит предупреждение

Это когда число двойной длины тут понятно.
А когда еще длиннее надо бы предупредить или выдать ошибку.?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 11, 2009 21:27 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
_Harry писал(а):
А когда еще длиннее надо бы предупредить или выдать ошибку.

а вот это сложно ловить. Я подумаю как сделать проще, но переполнение двойной разрядност ловить сложнее.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 11, 2009 23:02 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Очередные мои пять копеек:

Зачем явно указывать для чисел двойной длины какая часть числа в какой элемент стека пойдёт???

Я согласен: конечно, в Форте особенности вычислительного механизма (стек) ЯВНО присутствуют в языке.
НО! В подавляющем большинстве случаев прикладных программ программист абстрагируется от представления чисел в вычислительном механизме.
Знание распределение (количества) байтов по элементам стека может быть полезным, но мы можем попасть в просак при переносе фортовых исходников с платформы на платформу.

есть число 0х123456 - все прекрасно понимают, что это за число
как только вы устанавливаете правило какая часть байтов в какой элементов стека уходит, то при смене разрядности у вас это будет уже ДРУГОЕ число ( в середину числа внесены доп элементы - нулевые байты). А большинство алгоритмов работают с ЯЧЕЙКАМИ. И если двойное число это ДВЕ ячейки, то, при упомянутом мною случае, вы автоматом получаете ошибки и головняк.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 12, 2009 20:12 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Wlad писал(а):
Зачем явно указывать для чисел двойной длины какая часть числа в какой элемент стека пойдёт???

это вообще-то определяется используемой архитектурой процессора BIG vs LITTLE endian

Wlad писал(а):
НО! В подавляющем большинстве случаев прикладных программ программист абстрагируется от представления чисел в вычислительном механизме.

я не акцентировал то, как хранятся числа в памяти. Я просто показал, в чем отличе в записи: 123`123 и 123:123
если есть идея, как это сделать без показывания как оно в памяти будет лежать, то говори 8) я исправлю(сь)

Wlad писал(а):
как только вы устанавливаете правило какая часть байтов в какой элементов стека уходит, то при смене разрядности у вас это будет уже ДРУГОЕ число ( в середину числа внесены доп элементы - нулевые байты). А большинство алгоритмов работают с ЯЧЕЙКАМИ. И если двойное число это ДВЕ ячейки, то, при упомянутом мною случае, вы автоматом получаете ошибки и головняк.

эм, не совсем так. Собственно две ячейки и есть две ячейки.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re:
СообщениеДобавлено: Вт май 28, 2013 11:39 
Не в сети
Аватара пользователя

Зарегистрирован: Пт окт 15, 2010 14:29
Сообщения: 124
Благодарил (а): 68 раз.
Поблагодарили: 1 раз.
mOleg писал(а):
то есть предлагаете формат записи чисел двойной длины:
1231:3423 ?
тогда если просто число типа; 1234313478 не влазит в CELL, то ошибку выдавать?
я правильно понял?

Сорри за некропостинг. Посчитал данную тему для себя крайне важной, хочется высказаться. Скорее пост себе - в качестве размышления.

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

1) Компилируется/интерпретируется код, он изначально знает о своей разрядности целевой платформы
2) Создается некая библиотека - в заголовка/настройках программист обязан указать желаемую разрядность
3) "Линкер" обязан подключить одну из библиотек - "родной" разрядности или "повышенной" в зависимости от двух факторов - спецификация разрядности в коде, анализ неопределенной разрядности в процессе разбора исходного кода

Примеры:

работаем с числом xEF0D

  • Для 8-битного процессора это число "не родное", нужно использование библиотеки "повышенной разрядности";
  • Для 16-,32-,64-битного - оно вмещается в "битность" - используем "родную" библиотеку;

Есть ряд задач, где необходимо манипулировать сверх-большими числами. Порядка n*10^100. Как поступить? ИМХО - это адекватно ложится в мою концепцию "родное/не родное" вычисление.

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

_________________
Мои программные ништякиhttps://majestio.info


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: представление чисел
СообщениеДобавлено: Ср май 29, 2013 10:53 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Majestio писал(а):
Конечная программа может (должна) работать на процессорах различной разрядности. Я считаю, что имеет смысл разделить вычисления на "родные" и "зарубежные" (читаем "за рубежом").

в Форте обычно так:
Есть базовая разрядность, с которой работает ФВМ (обычно, но не всегда, соответствует разрядности АЛУ процессора); все операции без префиксов работают с числами данной разрядности; если появляется новый тип данных, появляются операции с префиксами, т.е.:
@ ! - это работа со значениям базовой разрядности;
2@ 2! (или D@ D!) - работа со значениями двойной длины;
F@ F! - работа с числами в формате с плавающей точкой,
и т.д.
Такой формат вобщем достаточно универсален, но, при портировании кода на другие системы с другой разрядностью возможны проблемы, но аналогичные проблемы у того же Си с типом int.
Возможно, стоит забить на CELL (то есть ячейку базовой разрядности) и явно указывать для каждой операции разрядность операндов, т.е., к примеру, убрать @ и ! заменив их на Q@ Q! (вобщем префикс ввести обязательный). Последнее будет нормально работать для чисел базовой разрядности и ниже, а вот с числами, не влезающими в CELL проблема не уйдет.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: представление чисел
СообщениеДобавлено: Ср май 29, 2013 11:19 
В простейшей Forth-реализации львиная доля чисел требуется на обслуживание адресной арифметики и естественным является стек, содержащий вперемешку числа и адреса (понятно, одинаковой длины).
Если требуется работа с "другими" числами, то, за исключением популярных трюков с двойными числами, проще создать отдельный стек.
Если же шитый код сам требует "странных" чисел, например, упакованных, то имеет смысл сразу отказаться от "обычного" способа построения Forth системы, разделив "логическую" и "физическую" организацию компилируемого кода. (Т.е. Forth будет думать, что работает с обычными числами/адресами или, даже, методами/сообщениями, а слова работы со словарем будут переводить их в требуемый вид - относительный, упакованный или еще какой).


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

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB