Forth http://www.fforum.winglion.ru/ |
|
представление чисел http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2221 |
Страница 2 из 5 |
Автор: | Pretorian [ Пн авг 03, 2009 06:56 ] |
Заголовок сообщения: | Re: представление чисел |
mOleg писал(а): В различных Форт-системах числа из текстового представления преобразуются во внутреннее представление (бинарное) несколько различным образом. К примеру, ввод длинного числа (разрядностью более CELL) в ряде систем приведет к появлению на стеке данных числа двойной длины, в ряде систем числа одинарной длины, а в ряде систем к ошибке. Причем, слишком длинные числа, в том же СПФ, к примеру обрезаются сверху, то есть теряются старшие разряды, если число не влазит в CELL
То же самое с разделительной точкой, то есть: 1234.1234 в одних системах будет распознано как: 0 12341234 , в то время как в других, как: 1234 1234 , плюс порядок хранения пар значений двойной длины от системы к системе меняется, то есть 1.2 в одном случае будет выглядеть как 1 2 а в другом 2 1 . Вот, собственно возник вопрос, как лучше сделать? (удобнее, правильнее) Не вижу тут проблемы, все закономерно у x32 своя точность, у x64 своя. На то она и разрядность, что бы давать какие то преимущества. Мое мнение отбрасывать старшие разряды, так оно будет правильнее (если есть переполнение то в этом ни кто не виноват ). |
Автор: | вопрос [ Пн авг 03, 2009 08:37 ] |
Заголовок сообщения: | |
Ну, лучше такой алгоритм, где выдаётся предупреждение - можно ... как в Эйфории - если разряд превышает допустимые пределы - автоматический перевод в числа с плавающей точкой (если я не путаю) |
Автор: | Pretorian [ Пн авг 03, 2009 10:37 ] |
Заголовок сообщения: | |
Да флага FALSE будет достаточно если разрядность превышает. |
Автор: | in4 [ Пн авг 03, 2009 11:00 ] |
Заголовок сообщения: | |
А если в библиотеку добавить тестирующий код (или примерчик), который определяет и сообщает об этих особенностях систем, например, как хранятся числа на стеке, какая максимальная разрядность... Вот кусок стандарта: Код: 3.1.4.1 Вот константы для максимальных чисел:Double-cell integers On the stack, the cell containing the most significant part of a double-cell integer shall be above the cell containing the least significant part. The implementation-defined range of double-cell signed integers shall include {-2147483647..+2147483647}. The implementation-defined range of double-cell non-negative integers shall include {0..2147483647}. The implementation-defined range of double-cell unsigned integers shall include {0..4294967295}. Placing the single-cell integer zero on the stack above a single-cell unsigned integer produces a double-cell unsigned integer with the same value. See 3.2.1.1 Internal number representation. Код: MAX-D d yes largest usable signed double number MAX-N n yes largest usable signed integer MAX-U u yes largest usable unsigned integer MAX-UD ud yes largest usable unsigned double number А вот это мне не нравится: Код: 8.3.2 Мне более удобно иметь точку в середине строки - 4-символьные части разделять...
Text interpreter input number conversion When the text interpreter processes a number that is immediately followed by a decimal point and is not found as a definition name, the text interpreter shall convert it to a double-cell number. For example, entering DECIMAL 1234 leaves the single-cell number 1234 on the stack, and entering DECIMAL 1234. leaves the double-cell number 1234 0 on the stack. |
Автор: | Hishnik [ Пн авг 03, 2009 11:37 ] |
Заголовок сообщения: | |
Мда. Ну ладно еще, в начале 90-х не везде был сопроцессор, и можно было повыпендриваться с утилизацией разделительной точки. Но сейчас-то кого еще надо насмешить подходом "у всех точка - признак вещественного числа, а у нас - двойной длины!". Это что, по принципу "юродивых не обижают"? |
Автор: | in4 [ Пн авг 03, 2009 15:22 ] |
Заголовок сообщения: | |
Вариант оставить точку для вещественных, а части двойного разделять, например, двоеточием мне нравится еще больше! |
Автор: | in4 [ Пн авг 03, 2009 15:23 ] |
Заголовок сообщения: | |
in4 писал(а): Вариант оставить точку для вещественных, а части двойного разделять, например, двоеточием - мне нравится еще больше!
|
Автор: | Hishnik [ Пн авг 03, 2009 15:41 ] |
Заголовок сообщения: | |
in4 писал(а): Вариант оставить точку для вещественных, а части двойного разделять, например, двоеточием мне нравится еще больше! Smile
Аналогично. Оно уже прижилось и обычно понятно людям без дополнительных разъяснений. А использовать точку не как у всех, чтобы после набора пары сотен строк человек получил совершенно непонятное на первый взгляд поведение программы с массой ошибок и падений... это что, способ заставить программиста почитать спецификацию языка? Чтобы они прониклись идеологией, восхитились и зауважали? Ага, сейчас... |
Автор: | mOleg [ Пн авг 03, 2009 21:12 ] |
Заголовок сообщения: | |
то есть предлагаете формат записи чисел двойной длины: 1231:3423 ? тогда если просто число типа; 1234313478 не влазит в CELL, то ошибку выдавать? я правильно понял? |
Автор: | вопрос [ Пн авг 03, 2009 22:15 ] |
Заголовок сообщения: | |
Хищник писал(а): in4 писал(а): Вариант оставить точку для вещественных, а части двойного разделять, например, двоеточием мне нравится еще больше! Smile Аналогично. Оно уже прижилось и обычно понятно людям без дополнительных разъяснений. А использовать точку не как у всех, чтобы после набора пары сотен строк человек получил совершенно непонятное на первый взгляд поведение программы с массой ошибок и падений... это что, способ заставить программиста почитать спецификацию языка? Чтобы они прониклись идеологией, восхитились и зауважали? Ага, сейчас... ВООбще, следует стремиться избегать беспричинной оригинальности Чем более один язык похож на другой, тем лучше |
Автор: | in4 [ Вт авг 04, 2009 01:26 ] |
Заголовок сообщения: | |
mOleg писал(а): то есть предлагаете формат записи чисел двойной длины: Да. Еще и 0x или $ в начале для HEX.1231:3423 ? mOleg писал(а): тогда если просто число типа; 1234313478 не влазит в CELL, то ошибку выдавать? Не ошибку, а предупреждение (Warning) бы, что отсекаются старшие разряды...
|
Автор: | Hishnik [ Вт авг 04, 2009 13:29 ] |
Заголовок сообщения: | |
mOleg писал(а): то есть предлагаете формат записи чисел двойной длины:
1231:3423 ? Тогда уж 12345678:9ABCDEF0 |
Автор: | mOleg [ Вт авг 04, 2009 19:22 ] |
Заголовок сообщения: | |
так, хорошо, а где еще числа двойной длины через : пишутся? и как обычно такое число расценивается, то есть, что обычно обозначает место двоеточия? тут может быть два варианта: 1) ничего не значит 2) отделяет содержимое младшего разряда от старшего насчет шестнадцатиричных чисел, я уже выбрал вариант с 0x |
Автор: | Wlad [ Вт авг 04, 2009 23:11 ] |
Заголовок сообщения: | |
Раз уж выбрали 0x, то уже тогда можно и L в конце для длинных добавлять... |
Автор: | вопрос [ Вт авг 04, 2009 23:21 ] |
Заголовок сообщения: | |
Wlad писал(а): Раз уж выбрали 0x, то уже тогда можно и L в конце для длинных добавлять...
ТОчно, и 0 (NULL) перед восьмеричными. |
Страница 2 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |