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

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
mOleg писал(а):
В различных Форт-системах числа из текстового представления преобразуются во внутреннее представление (бинарное) несколько различным образом. К примеру, ввод длинного числа (разрядностью более CELL) в ряде систем приведет к появлению на стеке данных числа двойной длины, в ряде систем числа одинарной длины, а в ряде систем к ошибке. Причем, слишком длинные числа, в том же СПФ, к примеру обрезаются сверху, то есть теряются старшие разряды, если число не влазит в CELL

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

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

Не вижу тут проблемы, все закономерно у x32 своя точность, у x64 своя. На то она и разрядность, что бы давать какие то преимущества. Мое мнение отбрасывать старшие разряды, так оно будет правильнее (если есть переполнение то в этом ни кто не виноват ;) ).

_________________
Меня нет, не будет и не было.


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

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


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Да флага FALSE будет достаточно если разрядность превышает.

_________________
Меня нет, не будет и не было.


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
А если в библиотеку добавить тестирующий код (или примерчик), который определяет и сообщает об этих особенностях систем, например, как хранятся числа на стеке, какая максимальная разрядность...

Вот кусок стандарта:
Код:
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   
       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.
Мне более удобно иметь точку в середине строки - 4-символьные части разделять...

_________________
With best wishes, in4.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Мда. Ну ладно еще, в начале 90-х не везде был сопроцессор, и можно было повыпендриваться с утилизацией разделительной точки. Но сейчас-то кого еще надо насмешить подходом "у всех точка - признак вещественного числа, а у нас - двойной длины!". Это что, по принципу "юродивых не обижают"?


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Вариант оставить точку для вещественных, а части двойного разделять, например, двоеточием мне нравится еще больше! :)

_________________
With best wishes, in4.


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
in4 писал(а):
Вариант оставить точку для вещественных, а части двойного разделять, например, двоеточием - мне нравится еще больше! :)

_________________
With best wishes, in4.


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

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

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


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

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

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
in4 писал(а):
Вариант оставить точку для вещественных, а части двойного разделять, например, двоеточием мне нравится еще больше! Smile

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

ВООбще, следует стремиться избегать беспричинной оригинальности

Чем более один язык похож на другой, тем лучше


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
mOleg писал(а):
то есть предлагаете формат записи чисел двойной длины:
1231:3423 ?
Да. Еще и 0x или $ в начале для HEX.
mOleg писал(а):
тогда если просто число типа; 1234313478 не влазит в CELL, то ошибку выдавать?
Не ошибку, а предупреждение (Warning) бы, что отсекаются старшие разряды...

_________________
With best wishes, in4.


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

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

Тогда уж 12345678:9ABCDEF0


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

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

насчет шестнадцатиричных чисел, я уже выбрал вариант с 0x

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


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Раз уж выбрали 0x, то уже тогда можно и L в конце для длинных добавлять... :)


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Wlad писал(а):
Раз уж выбрали 0x, то уже тогда можно и L в конце для длинных добавлять... :)

ТОчно, и 0 (NULL) перед восьмеричными.


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

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


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

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


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

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