Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 20:22

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 133 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.
Автор Сообщение
 Заголовок сообщения: числа формат, преобразование, представление
СообщениеДобавлено: Вс фев 28, 2010 17:46 
Не в сети
Moderator
Moderator
Аватара пользователя

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

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


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

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

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


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

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Не особо надо, вот лично мне вполне хватает одинарной разрядности.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Несколько непонятно, в чем заключается вопрос. Необходимо адекватное представление чисел в текстовом виде, и корректное обратное преобразование. В ряде систем это делается путем реализации этих операций для чисел двойной разрядности (просто потому, что они там все равно используются и поддерживаются), а потом для экономии те же слова используются для чисел базовой разрядности.


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
mOleg писал(а):
Итак, вопрос номер один. Преобразование а именно преобразование чисел в строковую (текстовую форму и обратно).
Нужна ли действительно двойная разрядность при проведении этих операций?


Может оказаться, что и двойной разрядности мало. Во всяком случае, если думать о преобразовании не только целых, но и float-ов

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


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

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Достаточно той разрядности, которую имеют преобразуемые числа.
В частности, хватает и для того, чтобы обнаружить переполнение при преобразованиии строка->число.


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

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

и это тоже но это обсуждалось по крайней мере предложения есть.
хотя, хочу заметить, что переменная BASE уже идеалогически устарела. Все стараются числа представлять таким образом, чтобы было сразу понятно в какой системе число. Кроме того, использование BASE так же не удобно при создании своих "распознавалок" форматов чисел.
Поэтому >NUMBER , к примеру, должен получать BASE в явном виде: ( asc # base --> asc # err | ud 0 ).

теперь, что касается преобразования чисел. Дело в том, что двойная арифметика не всегда нужна, а иногда и вредна (если памяти немного). Написать преобразование чисел из текстового представления во внутреннее и обратно для чисел одинарной длины проще, чем для чисел двойной, особенно, если доступная глубина стеков 1-2 ячейки и нет вспомогательных регистров. Именно об этом вопрос, ведь по сути не особо важно сколько параметров берут: # #S #> , а вот используются ли при этом S>D 2OVER 2SWAP DNEGATE UD/ или нет может оказаться несколько более критичным.

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


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

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

флоаты обычно преобразуются на другом стеке и в другом АЛУ, по крайней мере на PC

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
mOleg писал(а):
хочу заметить, что переменная BASE уже идеалогически устарела

Вот опять глобальная переменная, которая вносит ненужные завязки и усложнения.
100 - одинарное, основание decimal
100d - двойное, основание decimal
100q - четверное, основание decimal
100h - одинарное, основание hex
100dh - двойное, основание hex
100qh - четверное, основание hex
. .d .h .dh .q .qh и т.д. - вывод на печать и дальше в том же ключе
пс. о флоат-числах отдельный разговор

_________________
С уважением, chess


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

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

Термин "идеологически" все же следует и правильно писать, и правильно применять :)
mOleg писал(а):
Все стараются числа представлять таким образом, чтобы было сразу понятно в какой системе число. Кроме того, использование BASE так же не удобно при создании своих "распознавалок" форматов чисел.

Представление чисел и их преобразование - это разные вещи. Дело ведь отнюдь не в том, содержится ли информация об основании системы счисления в записи числа, ведь текстовую строку надо как-то преобразовать. А вот для этого и нужно где-то хранить основание. Так почему не в BASE?
mOleg писал(а):
Кроме того, использование BASE так же не удобно при создании своих "распознавалок" форматов чисел.

"Свою распознавалку" без BASE в студию! :)
mOleg писал(а):
Поэтому >NUMBER , к примеру, должен получать BASE в явном виде: ( asc # base --> asc # err | ud 0 ).

И кто же ему это обеспечит? А также где будет хранить?
mOleg писал(а):
Написать преобразование чисел из текстового представления во внутреннее и обратно для чисел одинарной длины проще, чем для чисел двойной, особенно, если доступная глубина стеков 1-2 ячейки и нет вспомогательных регистров. Именно об этом вопрос, ведь по сути не особо важно сколько параметров берут: # #S #> , а вот используются ли при этом S>D 2OVER 2SWAP DNEGATE UD/ или нет может оказаться несколько более критичным.

Вообще говоря, преобразование числа легко может быть оформлено в виде примитива, где будут использоваться ровно те команды, которые требуются и удобны. Ведь форматное преобразование как-то делается в реализациях других языков? При этом иметь слова для работы с числами двойной длины совсем не обязательно.


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Хищник писал(а):
Представление чисел и их преобразование - это разные вещи. Дело ведь отнюдь не в том, содержится ли информация об основании системы счисления в записи числа, ведь текстовую строку надо как-то преобразовать. А вот для этого и нужно где-то хранить основание. Так почему не в BASE?

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

_________________
С уважением, chess


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

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

<pre>
\ преобразовать символ в цифру √
: >CIPHER ( c --> u|-1 )
DUP [CHAR] 0 [CHAR] : WITHIN IF 48 - ;THEN
DUP [CHAR] A [CHAR] [ WITHIN IF 55 - ;THEN
DUP [CHAR] a [CHAR] { WITHIN IF 87 - ;THEN
DROP -1 ;

\ попытаться преобразовать символ char в цифру,
\ в системе счисления, определяемой base √
: DIGIT ( char base --> u TRUE | FALSE )
SWAP >CIPHER TUCK U>
IF TRUE ;THEN
DROP FALSE ;

\ добавить цифру x к числу d в указанной системе счисления base
: CIPHER ( d x base --> d ) >L U>D DSWAP L> DU* D+ ;

\ перевести символьное представление числа во внутреннее по указанной base √
\ преобразование ведется до конца строки или до первого непреобразуемого
\ символа. Если asc # на выходе имеет нулевую длину, число опознано.
: >number ( ud asc # base --> ud asc # )
>R BEGIN *WHILE \ пока не конец строки
OVER C@ R@ DIGIT WHILE \ до первой непреобразуемой цифры
-ROT SKIP1 D>L R@ CIPHER DL> \ добавить цифру
REPEAT
THEN RDROP ;
</pre>

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


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

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

и тут я абсолютно согласен. Из примеров в том же SMAL32 так было сделано (>VAL, кажется, называлось).
только для этого самого слова должен быть определен интерфейс, т.е. что на входе и что на выходе, а варианты есть:
1) стандартный ( ud asc # --> ud1 asc # )
2) упрощенный ( asc # --> u )
3) без использования переменной BASE ( asc # base --> u )
так же возможны вариации с тем, будет ли слово ловить ошибки или нет.

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
: DIGIT ( char base --> u TRUE | FALSE )

Ну а тут что в стековой нотации? От того, что значение BASE отдано какому-то внешнему коду, необходимость ее хранения не пропадает. А значит, основание системы счисления все равно будет где-то храниться. И кто отгадает, какое имя скорее всего будет присвоено этой переменной? :)


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
mOleg писал(а):
: DIGIT ( char base --> u TRUE | FALSE )

Ну а тут что в стековой нотации? От того, что значение BASE отдано какому-то внешнему коду, необходимость ее хранения не пропадает. А значит, основание системы счисления все равно будет где-то храниться. И кто отгадает, какое имя скорее всего будет присвоено этой переменной? :)
numeration-base :D


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

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


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

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


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

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