Forth http://www.fforum.winglion.ru/ |
|
представление чисел http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2221 |
Страница 4 из 5 |
Автор: | Hishnik [ Чт авг 06, 2009 02:14 ] |
Заголовок сообщения: | |
вопрос писал(а): Префиксы - всему, что не десятичное и, может быть, вообще всему, что может вызвать разночтение
Но ведь бывают полезны случаи, когда установка системы счисления, отличной от 10, удобна или попросту является единственным вариантом. К примеру, я так устанавливаю выводы для матричных корпусов ПЛИС - любая цифробуквенная комбинация является правильным числом в системе счисления с основанием 36. Префиксы тут лишние. |
Автор: | вопрос [ Чт авг 06, 2009 08:12 ] |
Заголовок сообщения: | |
ну, тогда следует быть до конца последовательными и вместо "установки системы счисления" ввести "установку режима распознавания" - с префиксами или без |
Автор: | Hishnik [ Чт авг 06, 2009 10:42 ] |
Заголовок сообщения: | |
вопрос писал(а): ну, тогда следует быть до конца последовательными и вместо "установки системы счисления" ввести "установку режима распознавания" - с префиксами или без
Это разные вещи. Установка системы счисления производится модификацией системной переменной со всеми вытекающими - можно вычислять требуемое основание, заводить его туда из таблицы, в процессе ввода чисел из файла предварять каждое число установкой нужной системы и т.д. А когда число само по себе содержит спецификатор, он влияет только на преобразование текущего числа. |
Автор: | вопрос [ Чт авг 06, 2009 21:18 ] |
Заголовок сообщения: | |
WingLion писал(а): вопрос писал(а): и 0 (NULL) перед восьмеричными точно NULL, а не OCTAL? из древнего руководства пользователя С++ Цитата: Целочисленные константы
Целочисленные константы могут быть десятичными (основа- ние системы счисления 10), восьмеричными (основание 8 ) или шестнадцатиричными (основание 16). При отсутствии переопре- деляющих суффиксов типданныхцелочисленной константы выводит- ся из ее значения, как показано в таблице 1.6. Отметим, что правила для десятичных и не-десятичных констант различны. Десятичные константы Допустимыми являются десятичные константы величиной от 0 до 4,294,967,295. Константы, выходящие за указанные преде- лы, вызывают ошибку. Десятичныеконстанты не могут иметь ве- дущие нули. Целочисленнаяконстанта с ведущим нулем рассмат- риваетсякак восьмеричная. Таким образом, int i = 10; /* десятичное 10 */ int i = 010; /* десятичное 8 */ int i = 0; /* десятичное 0 = восьмеричному 0! */ Отрицательные константы- это просто константы без знака, к которым применена унарная операция минус. Восьмеричные константы Все константыс ведущим нулем рассматриваются как вось- меричные.Если восьмеричная константа содержит недопустимые цифры 8 или 9, выдается сообщение об ошибке. Ошибка будет также выдаваться при превышении восьмеричной константой зна- чения 037777777777. Шестнадцатиричные константы Все константы, начинающиеся с 0x (или 0X) рассматрива- ются как шестнадцатиричные. Шестнадцатиричные константы,пре- вышающие 0xFFFFFFFF, приводят к ошибке. Суффиксы длинных констант и констант без знака Если законстантой следует суффикс L (или l), то такая константа будет представлена как длинная (типа long).Анало- гичным образом, суффикс U (или u) делает константу констан- той без знака (unsigned). Если численное значение константы превышает десятичное 65,535, независимо от используемого ос- нованиясистемы счисления, то такая константа будет иметь тип unsigned long. Суффиксы можно указывать для одной и той же константы в произвольном порядке и набирать в любом регист- ре: ul, lu, UL и т.д. |
Автор: | mOleg [ Пт авг 07, 2009 03:47 ] |
Заголовок сообщения: | |
итак, в следующей сборке будет добавлена следующая дока: <pre> в данной Форт-системе есть ряд отличий и в том, как распознаются числа, и в том, какой формат записи чисел принят. Во-первых, числа в системе не отличаются от обычных слов с точки зрения транслятора, так как числа распознает специальный словарь NUMBERS . Соответственно, порядок поиска (ORDER) определяет момент, в который будут распознаваться числа, к примеру, его можно оставить на вершине контекста, тогда всякие шутки, типа: : 2 3 ; работать не будут, так как число 2 будет распознаваться раньше (кстати, словарь NUMBERS нельзя сделать текущим, то есть в него ничего нельзя компилировать). В обычном состоянии, то есть после выполнения слова ONLY в контексте остается ТРИ словаря в следующем порядке: NUMBERS ROOT FORTH причем, FORTH находится на вершине контекста. Словарь NUMBERS описан в .\kernel\vocabs\numbers.f Форт-система распознает числа, представленные следующим образом: 1) 1234567 то есть положительное число одинарной длины, 2) -123456 то есть отрицательное число одинарной длины, 3) 0xABCDEF положительное число одинарной длины в шестндцатиричной системе счисления, 4) -0x42DF0 отрицательное число одинарной длины в шестнадцатиричной системе счисления. Надо заметить, что число может быть и двойной длины, но тогда в STDERR будет выдаваться предупреждение о том, что вместо числа одинарной длины, введено число двойной длины, но только предупреждение, то есть процесс трансляции прерываться не будет 5) 123:456 - положительное число двойной длины, возможен вариант :123, в случае ведущего нуля, 6) -123:64 - отрицательное число двойной длины, возможне вариант -:123, в случае ведущего нуля, Символ ':' разделяет значение старшей и младшей ячеек числа, то есть запись: 123:456 оставит на вершине стека данных два числа одинарной длины: 456 123 таким образом длинные числа так вводить нельзя. 7) 123`456`789 - положительное число двойной длины, 8) -12`345`678 - отрицательное число двойной длины, так же возможно использование префикса '0x' . Замечу, что возможны следующие варианты записи чисел: `12345 123``456 1`2`3`4`5 0x'123 -0x1234`56 то есть символ ` лишь является признаком двойного числа, и может присутствовать в числе в любом удобном количестве. </pre> прошу критиковать (разумно) и предлагать возможные(необходимые) дополнения |
Автор: | WingLion [ Пт авг 07, 2009 06:26 ] |
Заголовок сообщения: | |
про BASE ничего не сказано. Или NUMBERS от него уже не зависит? |
Автор: | garbler [ Пт авг 07, 2009 10:44 ] |
Заголовок сообщения: | |
возможно, не стоило бы отбрасывать лидирующий ноль в :123 и, наверное, также не стоит допускать ` на первую позицию, (т.е. число должно начинаться с цифры или знака -, а далее следует всё, что требуется заданным форматом). |
Автор: | вопрос [ Пт авг 07, 2009 12:59 ] |
Заголовок сообщения: | |
Цитата: прошу критиковать (разумно) и предлагать возможные(необходимые) дополнения я думаю, что решение неплохое
|
Автор: | mOleg [ Пт авг 07, 2009 15:40 ] |
Заголовок сообщения: | |
WingLion писал(а): про BASE ничего не сказано. Или NUMBERS от него уже не зависит? да, действительно забыл 8( ща добавлю хотя доля правды в этом есть, BASE в форке практически не нужен, разве, что только для вывода чисел. по крайней мере практически все слова, ранее работающие с BASE получают "текущую систему счисления" в явном виде на стеке данных, например: >number ( ud asc # base --> ud asc # ) garbler писал(а): возможно, не стоило бы отбрасывать лидирующий ноль в :123
и, наверное, также не стоит допускать ` на первую позицию, (т.е. число должно начинаться с цифры или знака -, а далее следует всё, что требуется заданным форматом). ок, согласен, хотя я лично привык писать двойные числа так: .213 хотя, чаще даже так .0 |
Автор: | mOleg [ Пт авг 07, 2009 16:40 ] |
Заголовок сообщения: | |
ок, коррективы внесены, получается так: В данной Форт-системе есть ряд отличий и в том, как распознаются числа, и в том, какой формат записи чисел принят (по сравнению с ANSI94). Стандартно система работает только с целыми числами одинарной точности (32 бита), и двойной точности (64 бита). Числа в памяти системы хранятся так же, как принято на базовой платформе, то есть в дополнительном коде. Распознавание чисел в системе не отличается от работы с обычными словами с точки зрения транслятора, так как числа распознает специальный словарь NUMBERS . Соответственно, порядок поиска (ORDER) определяет момент, когда будут распознаваться числа, к примеру, его можно оставить на вершине контекста, тогда всякие шутки, типа: : 2 3 ; работать не будут, так как число 2 будет распознаваться раньше (словарь NUMBERS нельзя сделать текущим, то есть в него ничего нельзя компилировать). В обычном состоянии, то есть после выполнения слова ONLY в контексте остается ТРИ словаря в следующем порядке: NUMBERS ROOT FORTH FORTH находится на вершине контекста. То есть распознавание чисел в системе можно убрать вообще, убрав из контекста словарь NUMBERS . Соответственно, можно добавлять в контекст свои собственные словари, которые будут распознавать числа других форматов и видов записи, к примеру .\samples\sketches\fixed.fts, работающий с числами с фиксированной точкой. Словарь NUMBERS описан в .\kernel\vocabs\numbers.f Форт-система, точнее словарь NUMBERS , распознает числа, представленные следующим образом: 1) 1234567 то есть положительное число одинарной длины, 2) -123456 то есть отрицательное число одинарной длины, 3) 0xABCDEF положительное число одинарной длины в шестндцатиричной системе счисления, 4) -0x42DF0 отрицательное число одинарной длины в шестнадцатиричной системе счисления. Заглавные и прописные символы не различаются, то есть можно писать как: 0x1DEC, так и: 0x1dEc . Надо отметить, что число может быть и двойной длины, но тогда в STDERR будет выдаваться предупреждение о том, что вместо числа одинарной длины, введено число двойной длины, но только предупреждение, то есть процесс трансляции прерываться не будет 5) 123:456 - положительное число двойной длины, 6) -123:64 - отрицательное число двойной длины, Символ ':' разделяет значение старшей и младшей ячеек числа, то есть запись: 123:456 оставит на вершине стека данных два числа одинарной длины: 456 123 - таким образом, длинные числа так вводить нельзя. 7) 123`456`789 - положительное число двойной длины, 8) -12`345`678 - отрицательное число двойной длины, так же возможно использование префикса '0x' . возможны следующие варианты записи длинных чисел: 123``456 1`2`3`4`5 0x`123 -0x1234`56 то есть символ ` лишь является признаком двойного числа, и может присутствовать в числе в любом удобном месте (только не первым и не последним символом) и количестве. Выход за пределы разрядности двойного числа не определяется! Кроме перечисленного, в системе существует глобальная переменная BASE, которая определяет текущую систему счисления. Переключение текущей системы счисления производится с помощью слов HEX и DECIMAL , кроме того, текущую систему счисления можно задать принудительно, записав значение основания системы в переменную BASE, к примеру: 0x0A BASE ! или 8 BASE ! ; принятое ограничение сверху – 36 , то есть все цифры и буквы латинского алфавита (напомню, что при преобразовании заглавные и прописные символы не различаются). Обычно, после возникновения ошибки в консоли, либо при трансляции файла текущая система счисления сбрасывается в десятичную, что не всегда удобно ( к примеру во время отладки аппаратуры удобно работать только в 16-ричной системы). Поэтому в данной системе введено слово always, устанавливающее систему счисления по умолчанию, например: HEX always . |
Автор: | Wlad [ Пт авг 07, 2009 23:38 ] |
Заголовок сообщения: | |
А уважаемому сообществу не кажется несколько странным обсуждение данной темы в таком количестве сообщений? Мы же не в 1959 году, вообще-то... Даже если дело касается Форта, есть уже устоявшиеся "стандарты" (привычные формы) записи чисел в подавляющем большинстве языков программирования. В конце концов, слово NUMBER можно реализовать по одному в каждом из каких-либо соответствующих словарях/библиотеках... В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"... |
Автор: | вопрос [ Сб авг 08, 2009 10:40 ] |
Заголовок сообщения: | |
Цитата: В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"...
Любой язык можно поделить на 2-3 слоя Код: --------------------------------------------------------------
слой собственно пользователя (программиста) -------------------------------------------------------------- слой расширений (готовых решений и средств для удобства) -------------------------------------------------------------- слой ключевых идей (определяет сам язык) -------------------------------------------------------------- слой ключевых идей не подвергается изменениям - это опредление языка и он ограничен в обьёме (иначе язык невозможно было бы выучить) над ним присутствует слой расширений (для С это библиотеки, подключаемые в h файлах) - что-то, что может быть а может и не быть в языке, что не определяет язык, но делает его намного производительнее. А программист находится на слое программиста - изучив язык, пользуется доступными решениями, выбирает модификацию языка или компилятор с библиотеками. Будучи расширяемым, форт имеет совсем непроработанным 2 слой - отсюда эти проблемы - там где можно сделать как угодно, ничего как правило сделано не будет |
Автор: | mOleg [ Сб авг 08, 2009 17:52 ] |
Заголовок сообщения: | |
Wlad писал(а): В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"...
мне это странно слышать\видеть, так как в данной ветке идет обсуждение как лучше организовать ввод чисел с точки зрения пользователя(программиста) в конкретной Форт-системе (см. раздел). Поэтому ваш коментарий мне совсем не ясен. |
Автор: | garbler [ Пн авг 10, 2009 10:00 ] |
Заголовок сообщения: | |
to Wlad: вопрос писал(а): Будучи расширяемым, форт имеет совсем непроработанным 2 слой - отсюда эти проблемы - там где можно сделать как угодно, ничего как правило сделано не будет
вот-вот, характерный пример - Perl, например, там до сих пор нет именованных параметров в процедурах/функциях. т.е. на самом деле они очень легко реализуются библиотечкой в десяток строчек текста, и таких библиотечек десятки, но нет ни одной стандартной. причём таких моментов (как с параметрами) можно назвать много. |
Автор: | вопрос [ Пн авг 10, 2009 10:30 ] |
Заголовок сообщения: | |
Цитата: 0xABCDEF положительное число одинарной длины в шестндцатиричной системе счисления, Забыл спросить, чему в реальности соответствуют отрицательные шестнадцатеричные числа
4) -0x42DF0 отрицательное число одинарной длины в шестнадцатиричной системе счисления. Заглавные и прописные символы не различаются, то есть можно писать как: 0x1DEC, так и: 0x1dEc . Надо отметить, что число может быть и двойной длины, но тогда в STDERR будет выдаваться предупреждение о том, что вместо числа одинарной длины, введено число двойной длины, но только предупреждение, то есть процесс трансляции прерываться не будет |
Страница 4 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |