Forth http://www.fforum.winglion.ru/ |
|
представление чисел http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2221 |
Страница 1 из 5 |
Автор: | mOleg [ Пт июл 31, 2009 23:26 ] |
Заголовок сообщения: | представление чисел |
В различных Форт-системах числа из текстового представления преобразуются во внутреннее представление (бинарное) несколько различным образом. К примеру, ввод длинного числа (разрядностью более CELL) в ряде систем приведет к появлению на стеке данных числа двойной длины, в ряде систем числа одинарной длины, а в ряде систем к ошибке. Причем, слишком длинные числа, в том же СПФ, к примеру обрезаются сверху, то есть теряются старшие разряды, если число не влазит в CELL То же самое с разделительной точкой, то есть: 1234.1234 в одних системах будет распознано как: 0 12341234 , в то время как в других, как: 1234 1234 , плюс порядок хранения пар значений двойной длины от системы к системе меняется, то есть 1.2 в одном случае будет выглядеть как 1 2 а в другом 2 1 . Вот, собственно возник вопрос, как лучше сделать? (удобнее, правильнее) |
Автор: | Wlad [ Сб авг 01, 2009 15:09 ] |
Заголовок сообщения: | |
О, Господи! Да как же они живут со всем этим? Ну, раз такой безобразий, то - наплевать и забыть! И делать или как: 1) в большинстве систем 2) в самой массовой или популярной системе в мире 3) то же, что и 2) но - в СНГ/России 4) собственные правила 5) ANS |
Автор: | Hishnik [ Сб авг 01, 2009 15:15 ] |
Заголовок сообщения: | |
А что, разве есть однозначно правильное решение? И тогда, получается, остальные по каким-то причинам неправильные? |
Автор: | WingLion [ Сб авг 01, 2009 15:21 ] |
Заголовок сообщения: | |
Wlad писал(а): 1) в большинстве систем 2) в самой массовой или популярной системе в мире 3) то же, что и 2) но - в СНГ/России это окажется почти равносильно "сделать так, как на заборах пишут" mOleg писал(а): Вот, собственно возник вопрос, как лучше сделать? (удобнее, правильнее) Вот, думаю, что удобнее всего - это когда программисту думать не надо, что там и как сделано, в каком порядке биты лежат и т.п. А что есть "правильно" - вопрос вообще бессмыслен, как бессмысленно спрашивать: "12 часов - это правильное время или нет?" "правильно" - это может быть только в пределах одного форта - правильно - значит "по правилам". А правила: Wlad писал(а): 4) собственные правила
|
Автор: | вопрос [ Сб авг 01, 2009 16:53 ] |
Заголовок сообщения: | |
Нет, ну вопрос смысл имел определённо. Правильно ... Это - наиболее рационально для большинства случаев. Видимо, в общем случае алгоритм должен быть таков: находя число, которое не укладывается в разрядную сетку, компилятор должен или вызвать библиотеку работы с длинными числами (слова для работы с длинными числами) или - если таковая отсутствует - на её месте должна быть заглушка, вызывающая исключение и выводящая предупреждение. То же самое с точкой |
Автор: | Wlad [ Сб авг 01, 2009 17:25 ] |
Заголовок сообщения: | |
Давайте заложемся так: - в форте есть слова манипулирующие определённой разрядности числами. - эти слова НЕ ЗНАЮТ, ЧТО ДЕЙСТВИТЕЛЬНО им скармливается со стека. - то, что действительно лежит на стеке - ответственность программиста. остались правила синтаксического разбора для представления введённых чисел для их преобразования в двоичное представление для помещения на стек. теперб осталось понять, что здесь будет ИСКЛЮЧЕНИЕМ из таких правил относительно литералов-ЧИСЕЛ. |
Автор: | Kamikaze [ Сб авг 01, 2009 17:54 ] |
Заголовок сообщения: | |
Вопрос же был не об обработке, а об представлении... Тогда встречный вопрос: насколько большие ЭТИ числа? Знаков 30-40 - исходя из того, что "для вычисления длины окружности Вселенной с точностью до радиуса атома водорода достаточно знание 39 знаков числа "пи"? И не лучше ли так оставить эти сверхдлинные числа в строковом представлении, подогнав для работы с ними специальную библиотеку? (или выделить в особое строковое представление чисел) PS Кстати, чуть не в тему, но напомню об идее chess про слова-строки: http://fforum.winglion.ru/viewtopic.php?t=1484 |
Автор: | mOleg [ Сб авг 01, 2009 20:23 ] |
Заголовок сообщения: | |
Хищник писал(а): А что, разве есть однозначно правильное решение?
должен быть оптимальный вариант, именно об этом вопрос. впрочем, тут еще и вопрос совместимости, и вопрос ловли ляпов |
Автор: | Hishnik [ Сб авг 01, 2009 21:54 ] |
Заголовок сообщения: | |
mOleg писал(а): должен быть оптимальный вариант, именно об этом вопрос.
Оптимальности не бывает без критериев этой самой оптимальности. А критерии появляются, когда становится понятно, для каких целей предназначается программа. Иначе можно наделать много лишнего, что по прямому назначению на практике использоваться не будет, а вот время съест и ошибок насажает. |
Автор: | vikt [ Сб авг 01, 2009 22:06 ] |
Заголовок сообщения: | |
Как минимум в документации по Форту должно быть написано , 'зависит от реализации' . |
Автор: | mOleg [ Сб авг 01, 2009 23:03 ] |
Заголовок сообщения: | |
вопрос в том, чтобы, при разборе чисел не возникало непредвиденных ситуаций типа: 1) мы считаем, что число будет 32 битным(то есть занимать 1 CELL) а оно 64 битное 2) число должно быть 64 битным, но разрядная сетка увеличена (к примеру CELL = 64битам) и число получилось одинарное соответственно, возникает вопрос, как избегать неприятностей, и как лучше и удобнее для пользователя сделать. а точнее, стоит ли выдавать ошибку, если число имеет двойную длину, но не содержит в себе '.' то есть 999999999999 - должно выдать ошибку, а 9999.999999999 не должно |
Автор: | Wlad [ Сб авг 01, 2009 23:47 ] |
Заголовок сообщения: | |
mOleg писал(а): вопрос в том, чтобы, при разборе чисел не возникало непредвиденных ситуаций типа:
1) мы считаем, что число будет 32 битным(то есть занимать 1 CELL) а оно 64 битное 2) число должно быть 64 битным, но разрядная сетка увеличена (к примеру CELL = 64битам) и число получилось одинарное Абажьите! Мы сейчас ведём разговор об "оказалось" клгда пользователь вводит число в интерактиве или при компиляции??? Если первое - так - звыняйте, хлоцпи - бананив нэма - это вопрос прикладной задачи организовать фильтрацию входных данных. ежели второе - тут даже не знаю, как быть - мы просто стек гробим лёгким движением - по той причине, что в моём пункте была перечислена под нумером один: словам-то ПОФИГ - язычок-с бестиповый-с - получите, распишитесь! |
Автор: | mOleg [ Сб авг 01, 2009 23:50 ] |
Заголовок сообщения: | |
Wlad писал(а): пользователь вводит число в интерактиве или при компиляции?
а Форт этого не различает по сути. а вот насчет остального, лично мне не пофигу, а хочется, чтобы было удобнее (см. раздел, в котором поднята тема) |
Автор: | vikt [ Сб авг 01, 2009 23:53 ] |
Заголовок сообщения: | |
Может вздор скажу, не ругайте. Я бы наверно сделал бы флаги результатов операций. типа переполнения итд. Например интерпретатор после прочтения строки устанавливает флаг, что число 64 битное и четче определил формат входных данных. 99999.999999 это больше напоминает float. |
Автор: | mOleg [ Вс авг 02, 2009 01:02 ] |
Заголовок сообщения: | |
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 |
Страница 1 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |