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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Форт с плавающей запятой
Автор Сообщение
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Ethereal писал(а):
Чем такая кухня отличается от float ? Во float кроме мантиссы мы имеем ещё и
порядок. И из-за введения этого порядка быстродействие рассчетов падает
катастрофически.

Интересно, о какой эпохе микроэлектроники идет речь? :) Нормализация чисел (выравнивание порядков) выполняется специальным устройством барабанного сдвига, которое, хоть и громоздкое, но достаточно регулярное, ввиду чего уже в процессоре 80486DX присутствовало прямо на кристалле. В современных процессорах говорить о катастрофическом падении производительности при переходе к плавающей точке уже просто неверно.
Ethereal писал(а):
Все равно если числа различаются
двоичным порядком больше, чем длина мантиссы в битах, вы их и сложить-то уже
не сможете. Большее проглотит меньшее. Порядок у чисел в рассчетах все равно
должен быть сопоставимым, так-что он малополезен.

Ровно то же справедливо для целочисленного представления, или же представления с фиксированной точкой, чем и является подход, когда мы 16 разрядов виртуально отделяем точкой. Правда, double precision имеет 53 бита мантиссы, так что боьшее проглотит меньшее очень и очень нескоро. Явно позже, чем потеряется точность в 32-битной "мантиссе" целочисленного представления.
Сообщение Добавлено: Вс фев 27, 2011 14:22
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Просто красивый прием программирования.

Речь шла не зачем, а можно ли ...

Про округление. Требуемая точность обеспечивается здесь не правилом округления.
По сути я записываю число с плавающей запятой в двоичном виде и оставляю
только 16 двоичных цифр после запятой. Потом умножаю на 2^16 и получается целое.
В целых числах и считаю. Но не обязательно-же 16. Можно больше, если точность
нужна больше.

Чем такая кухня отличается от float ? Во float кроме мантиссы мы имеем ещё и
порядок. И из-за введения этого порядка быстродействие рассчетов падает
катастрофически. Но порядок - вещь гнилая. Все равно если числа различаются
двоичным порядком больше, чем длина мантиссы в битах, вы их и сложить-то уже
не сможете. Большее проглотит меньшее. Порядок у чисел в рассчетах все равно
должен быть сопоставимым, так-что он малополезен. Поэтому лучше прикинуть
сколько бит хватит слева от запятой и сколько справа и считать все в целых.
Сообщение Добавлено: Вс фев 27, 2011 05:22
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Цитата:
нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде.
Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ?

Надо не забывать, существует несколько правил округления, и не все обеспечат требуюмую точность.
Сообщение Добавлено: Сб фев 26, 2011 23:54
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Ethereal писал(а):
Именно в целочисленном формате и делать. Все числа, которые ты мыслишь как числа с плавающей запятой при таких
рассчетах, нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде.
Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ?
Тогда для этих чисел сложение и вычитание - это сложение и вычитание.
А умножение - умножить и 16 раз сдвинуть вправо. Деление - 16 раз сдвинуть влево и поделить.
В таком вот аксепте.

А зачем это все делать для OpenGL, который прекрасно воспринимает форматы с плавающей точкой?
Сообщение Добавлено: Сб фев 26, 2011 21:48
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Хищник писал(а):
Antender писал(а):
И кстати, а как насчет, например, стыковки текстур в трехмерных сценах, если ее делать в целочисленном формате?

Именно в целочисленном формате и делать. Все числа, которые ты мыслишь как числа с плавающей запятой при таких
рассчетах, нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде.
Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ?
Тогда для этих чисел сложение и вычитание - это сложение и вычитание.
А умножение - умножить и 16 раз сдвинуть вправо. Деление - 16 раз сдвинуть влево и поделить.
В таком вот аксепте.
Сообщение Добавлено: Сб фев 26, 2011 21:27
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
тема перемещена, т.к. находится не в том разделе.
Сообщение Добавлено: Ср сен 29, 2010 19:27
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
флуд не по теме перенесен сюда: viewtopic.php?f=7&t=2650&start=0
Сообщение Добавлено: Пт сен 17, 2010 17:45
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Antender писал(а):
А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF.

Кварк отлично подходит для обучения. И даже больше, чем спф - т. к. кварк намного проще.
Сообщение Добавлено: Чт сен 09, 2010 17:42
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Antender писал(а):
Плавающая запятая - это конечно хорошо, но в большинстве случаев она не нужна.
Например в книгах по С настоятельно не рекомендуют использовать плавающую запятую для циклов, для денежных сумм и в других местах. Разброс целых чисел от +2 миллиардов до -2 миллиардов более чем достаточен. Плавующую запятую в основном используют для приблизительных физических расчётов с гигантскими числами.

Не стоит говорить за всех. Тем более не стоит в паре предложений делать массу неточных, а то и некорректных высказываний. Плавающая точка нужна отнюдь не только для работы с "гигантскими" числами, а уж пассаж "приблизительные физические расчеты" меня даже развеселил. Ничего, что число двойной точности имеет в полтора раза больше бит мантиссы, чем в диапазоне "от +2 до -2 миллиардов"? :) И кстати, а как насчет, например, стыковки текстур в трехмерных сценах, если ее делать в целочисленном формате?
Antender писал(а):
Кроме того, чтобы использовать числа с плавающей запятой в форте нужна хитрая конвертация в число двойной точности, затем это число надо положить на дополнительный стек, затем использовать другие операции для подсчётов, затем если конвертировать обратно, число будет округляться. Овчинка не стоит выделки.

"В форте" никакая конвертация не нужна. Преобразованием чисел занимается непосредственно сопроцессор, и занимается аппаратно.
Antender писал(а):
А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF.

Не в обиду автору сообщения, не рановато ли делать всеобъемлющие выводы по применимости тех или иных трансляторов? :)
Сообщение Добавлено: Ср сен 01, 2010 23:26
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Antender писал(а):
Овчинка не стоит выделки.

На процессорах, поддерживающих плав. точку аппаратно, сделать не сложно. А где нет поддержки лучше не делать - это сложно и медленно получится.
Сообщение Добавлено: Ср сен 01, 2010 21:12
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
<Кроме того, чтобы использовать числа с плавающей запятой в форте нужна хитрая конвертация в число двойной точности, затем это число надо положить на дополнительный стек, затем использовать другие операции для подсчётов, затем если конвертировать обратно, число будет округляться. Овчинка не стоит выделки.>

Плавающая запятая всегда нужна, например в инженерных расчетах (геодезия, геология и т.п. ) где требуется
достичь наибольшей точности. "Целочисленная апроксимация" потребует намного больше затрат, чем использование
команд арифметического сопроцессора, которые во многих фортах реализованы, в то же SPF
Сообщение Добавлено: Ср сен 01, 2010 20:13
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Книги, которые стоит почитать про плавающую запятую:

Starting Forth Броуди ( и Thinking Forth )

Цитата:
При современном уровне развития IT это несколько странный вопрос. Вроде бы уже не 80-е годы, чтобы писать "плавающая точка - это, конечно, хорошо, но требует непомерный объем ресурсов и сильно тормозит вычисления".


Плавающая запятая - это конечно хорошо, но в большинстве случаев она не нужна.
Например в книгах по С настоятельно не рекомендуют использовать плавающую запятую для циклов, для денежных сумм и в других местах. Разброс целых чисел от +2 миллиардов до -2 миллиардов более чем достаточен. Плавующую запятую в основном используют для приблизительных физических расчётов с гигантскими числами.

В форте есть операция */ как раз для аппроксимации различных величин, Pi например при использовании целых чисел.

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

А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF.
Сообщение Добавлено: Ср сен 01, 2010 16:09
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Размеры стеков определены вот так:
Код:
  MAXCF             equ  1024
  MAXLOOP           equ   256
  MAXSELECTORS      equ   256
  MAXLOCALS         equ  1024
  MAXFRAMES         equ   256     


Код:
Dstack            rd 2048


Что касается стеков:
- стек данных и стек возвратов - стандартные стеки для Форта. Стек возвратов используется классическим для процессора образом - обеспечивать возврат из подпрограмм. Стек данных - массив в памяти с указателем глубины.
- стек чисел с плавающей точкой представляет собой аппаратный стек сопроцессора, глубиной 8.
- стек структур управления хранит идентификаторы структур управления при компиляции. Программисту, как правило, не нужен. В Форте этот стек часто не заводится, а необходимые данные лежат на стеке возвратов.
- стек циклов - аналогично предыдущему, программисту напрямую не нужен. Хранит текущее и конечное значение счетчико цикла, а также адрес начала итерации цикла.
- стек контекстов загрузки - хэндл файла, позиция в файле, содержимое TIB. Требуется для того, чтобы можно было продолжить интерпретацию файла после вложенной загрузки.
- стек фреймов - экспериментальная конструкция в этом трансляторе. Используется для хранения указателей стека для слов FRAME{ }FRAME.
Сообщение Добавлено: Ср сен 01, 2010 11:29
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Можно поподробнее про Quark?

Меня интересуют стеки.
Требуется инфа: для чего каждый тип стека? Сколько байт отводится изначально каждому стеку? Каков формат хранения данных стека?

В этом Форте как я понял есть 6 стеков:

* стек данных
* стек возвратов
* стек чисел с плавающей запятой
* стек структур управления
* стек циклов
* стек контекстов загрузки
Сообщение Добавлено: Ср сен 01, 2010 10:42
  Заголовок сообщения:  Re: Форт с плавающей запятой  Ответить с цитатой
Antender писал(а):
Если не секрет: а зачем Вам нужна плавающая запятая?

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

Собственно, вот страница проекта http://msyst.ru/?q=node/8 и описание http://www.msyst.ru/quark.pdf. Плавающая точка - это первое, что я в свое время сделал для Форта.
Сообщение Добавлено: Чт авг 26, 2010 23:22

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


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