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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

То же самое с разделительной точкой, то есть:
1234.1234 в одних системах будет распознано как: 0 12341234 , в то время как в других, как: 1234 1234 , плюс порядок хранения пар значений двойной длины от системы к системе меняется, то есть 1.2 в одном случае будет выглядеть как 1 2 а в другом 2 1 .

Вот, собственно возник вопрос, как лучше сделать? (удобнее, правильнее)

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


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
О, Господи! Да как же они живут со всем этим?
Ну, раз такой безобразий, то - наплевать и забыть!
И делать или как:
1) в большинстве систем
2) в самой массовой или популярной системе в мире
3) то же, что и 2) но - в СНГ/России
4) собственные правила
5) ANS


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
А что, разве есть однозначно правильное решение? И тогда, получается, остальные по каким-то причинам неправильные?


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Wlad писал(а):
1) в большинстве систем
2) в самой массовой или популярной системе в мире
3) то же, что и 2) но - в СНГ/России

это окажется почти равносильно "сделать так, как на заборах пишут"

mOleg писал(а):
Вот, собственно возник вопрос, как лучше сделать? (удобнее, правильнее)


Вот, думаю, что удобнее всего - это когда программисту думать не надо, что там и как сделано, в каком порядке биты лежат и т.п.

А что есть "правильно" - вопрос вообще бессмыслен, как бессмысленно спрашивать: "12 часов - это правильное время или нет?"

"правильно" - это может быть только в пределах одного форта - правильно - значит "по правилам".

А правила:

Wlad писал(а):
4) собственные правила

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Нет, ну вопрос смысл имел определённо.

Правильно ...
Это - наиболее рационально для большинства случаев.

Видимо, в общем случае алгоритм должен быть таков:
находя число, которое не укладывается в разрядную сетку, компилятор должен или вызвать библиотеку работы с длинными числами (слова для работы с длинными числами) или - если таковая отсутствует - на её месте должна быть заглушка, вызывающая исключение и выводящая предупреждение.
То же самое с точкой


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Давайте заложемся так:
- в форте есть слова манипулирующие определённой разрядности числами.
- эти слова НЕ ЗНАЮТ, ЧТО ДЕЙСТВИТЕЛЬНО им скармливается со стека.
- то, что действительно лежит на стеке - ответственность программиста.

остались правила синтаксического разбора для представления введённых чисел для их преобразования в двоичное представление для помещения на стек.
теперб осталось понять, что здесь будет ИСКЛЮЧЕНИЕМ из таких правил относительно литералов-ЧИСЕЛ. :)


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

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вопрос же был не об обработке, а об представлении...
Тогда встречный вопрос: насколько большие ЭТИ числа? Знаков 30-40 - исходя из того, что "для вычисления длины окружности Вселенной с точностью до радиуса атома водорода достаточно знание 39 знаков числа "пи"?

И не лучше ли так оставить эти сверхдлинные числа в строковом представлении, подогнав для работы с ними специальную библиотеку? (или выделить в особое строковое представление чисел)

PS Кстати, чуть не в тему, но напомню об идее chess про слова-строки: http://fforum.winglion.ru/viewtopic.php?t=1484

_________________
Банзай!


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

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

должен быть оптимальный вариант, именно об этом вопрос.

впрочем, тут еще и вопрос совместимости, и вопрос ловли ляпов

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
должен быть оптимальный вариант, именно об этом вопрос.

Оптимальности не бывает без критериев этой самой оптимальности. А критерии появляются, когда становится понятно, для каких целей предназначается программа. Иначе можно наделать много лишнего, что по прямому назначению на практике использоваться не будет, а вот время съест и ошибок насажает.


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Как минимум в документации по Форту должно быть написано , 'зависит от реализации' .


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

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

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

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


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
mOleg писал(а):
вопрос в том, чтобы, при разборе чисел не возникало непредвиденных ситуаций типа:
1) мы считаем, что число будет 32 битным(то есть занимать 1 CELL) а оно 64 битное
2) число должно быть 64 битным, но разрядная сетка увеличена (к примеру CELL = 64битам) и число получилось одинарное

Абажьите!
Мы сейчас ведём разговор об "оказалось" клгда пользователь вводит число в интерактиве или при компиляции???
Если первое - так - звыняйте, хлоцпи - бананив нэма - это вопрос прикладной задачи организовать фильтрацию входных данных.
ежели второе - тут даже не знаю, как быть - мы просто стек гробим лёгким движением - по той причине, что в моём пункте была перечислена под нумером один: словам-то ПОФИГ - язычок-с бестиповый-с - получите, распишитесь!


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

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

а Форт этого не различает по сути.

а вот насчет остального, лично мне не пофигу, а хочется, чтобы было удобнее (см. раздел, в котором поднята тема)

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Может вздор скажу, не ругайте. Я бы наверно сделал бы флаги результатов операций.
типа переполнения итд.
Например интерпретатор после прочтения строки устанавливает флаг, что число 64 битное
и четче определил формат входных данных. 99999.999999 это больше напоминает float.

_________________
Линукс решает, винда глотает.


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

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

ну, в некотором роде оно так и есть:
<pre>
\ пытаемся распознать число
: snNumber ( asc # --> 0 | n 1 | d 2 )
?SIGN >L s?number
*IF 1 -
IF L> IF DNEGATE THEN 2
ELSE DROP L> IF NEGATE THEN 1
THEN
;THEN
LDROP TDROP FALSE ;
</pre>
но это внутренняя часть

vikt писал(а):
четче определил формат входных данных. 99999.999999 это больше напоминает float.

да, это в чем-то так, но это именно из ansi94 корнями.
а float содержит в обязательном порядке символ 'e' 99999E9999

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


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

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


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

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


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

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