Forth
http://fforum.winglion.ru/

Форт с плавающей запятой
http://fforum.winglion.ru/viewtopic.php?f=35&t=2640
Страница 1 из 2

Автор:  Helloween [ Чт авг 26, 2010 16:50 ]
Заголовок сообщения:  Форт с плавающей запятой

Подскажите пожалуйста книгу с описанием любого диалекта Форт, лишь бы была поддержка плавающей запятой.

Автор:  Antender [ Чт авг 26, 2010 17:04 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

Если не секрет: а зачем Вам нужна плавающая запятая?

Автор:  Hishnik [ Чт авг 26, 2010 23:22 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

Antender писал(а):
Если не секрет: а зачем Вам нужна плавающая запятая?

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

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

Автор:  Helloween [ Ср сен 01, 2010 10:42 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

Можно поподробнее про Quark?

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

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

* стек данных
* стек возвратов
* стек чисел с плавающей запятой
* стек структур управления
* стек циклов
* стек контекстов загрузки

Автор:  Hishnik [ Ср сен 01, 2010 11:29 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

Размеры стеков определены вот так:
Код:
  MAXCF             equ  1024
  MAXLOOP           equ   256
  MAXSELECTORS      equ   256
  MAXLOCALS         equ  1024
  MAXFRAMES         equ   256     


Код:
Dstack            rd 2048


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

Автор:  Antender [ Ср сен 01, 2010 16:09 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

Книги, которые стоит почитать про плавающую запятую:

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

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


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

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

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

А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF.

Автор:  F-MAP [ Ср сен 01, 2010 20:13 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

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

Плавающая запятая всегда нужна, например в инженерных расчетах (геодезия, геология и т.п. ) где требуется
достичь наибольшей точности. "Целочисленная апроксимация" потребует намного больше затрат, чем использование
команд арифметического сопроцессора, которые во многих фортах реализованы, в то же SPF

Автор:  chess [ Ср сен 01, 2010 21:12 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

Antender писал(а):
Овчинка не стоит выделки.

На процессорах, поддерживающих плав. точку аппаратно, сделать не сложно. А где нет поддержки лучше не делать - это сложно и медленно получится.

Автор:  Hishnik [ Ср сен 01, 2010 23:26 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

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

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

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

Не в обиду автору сообщения, не рановато ли делать всеобъемлющие выводы по применимости тех или иных трансляторов? :)

Автор:  VoidVolker [ Чт сен 09, 2010 17:42 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

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

Кварк отлично подходит для обучения. И даже больше, чем спф - т. к. кварк намного проще.

Автор:  WingLion [ Пт сен 17, 2010 17:45 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

флуд не по теме перенесен сюда: viewtopic.php?f=7&t=2650&start=0

Автор:  mOleg [ Ср сен 29, 2010 19:27 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

тема перемещена, т.к. находится не в том разделе.

Автор:  Ethereal [ Сб фев 26, 2011 21:27 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

Хищник писал(а):
Antender писал(а):
И кстати, а как насчет, например, стыковки текстур в трехмерных сценах, если ее делать в целочисленном формате?

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

Автор:  Hishnik [ Сб фев 26, 2011 21:48 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

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

А зачем это все делать для OpenGL, который прекрасно воспринимает форматы с плавающей точкой?

Автор:  F-MAP [ Сб фев 26, 2011 23:54 ]
Заголовок сообщения:  Re: Форт с плавающей запятой

Цитата:
нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде.
Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ?

Надо не забывать, существует несколько правил округления, и не все обеспечат требуюмую точность.

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/