Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Ethereal писал(а): Чем такая кухня отличается от float ? Во float кроме мантиссы мы имеем ещё и порядок. И из-за введения этого порядка быстродействие рассчетов падает катастрофически. Интересно, о какой эпохе микроэлектроники идет речь? Нормализация чисел (выравнивание порядков) выполняется специальным устройством барабанного сдвига, которое, хоть и громоздкое, но достаточно регулярное, ввиду чего уже в процессоре 80486DX присутствовало прямо на кристалле. В современных процессорах говорить о катастрофическом падении производительности при переходе к плавающей точке уже просто неверно. Ethereal писал(а): Все равно если числа различаются двоичным порядком больше, чем длина мантиссы в битах, вы их и сложить-то уже не сможете. Большее проглотит меньшее. Порядок у чисел в рассчетах все равно должен быть сопоставимым, так-что он малополезен. Ровно то же справедливо для целочисленного представления, или же представления с фиксированной точкой, чем и является подход, когда мы 16 разрядов виртуально отделяем точкой. Правда, double precision имеет 53 бита мантиссы, так что боьшее проглотит меньшее очень и очень нескоро. Явно позже, чем потеряется точность в 32-битной "мантиссе" целочисленного представления.
[quote="Ethereal"]Чем такая кухня отличается от float ? Во float кроме мантиссы мы имеем ещё и порядок. И из-за введения этого порядка быстродействие рассчетов падает катастрофически.[/quote] Интересно, о какой эпохе микроэлектроники идет речь? :) Нормализация чисел (выравнивание порядков) выполняется специальным устройством барабанного сдвига, которое, хоть и громоздкое, но достаточно регулярное, ввиду чего уже в процессоре 80486DX присутствовало прямо на кристалле. В современных процессорах говорить о катастрофическом падении производительности при переходе к плавающей точке уже просто неверно. [quote="Ethereal"]Все равно если числа различаются двоичным порядком больше, чем длина мантиссы в битах, вы их и сложить-то уже не сможете. Большее проглотит меньшее. Порядок у чисел в рассчетах все равно должен быть сопоставимым, так-что он малополезен.[/quote] Ровно то же справедливо для целочисленного представления, или же представления с фиксированной точкой, чем и является подход, когда мы 16 разрядов виртуально отделяем точкой. Правда, double precision имеет 53 бита мантиссы, так что боьшее проглотит меньшее очень и очень нескоро. Явно позже, чем потеряется точность в 32-битной "мантиссе" целочисленного представления.
|
|
|
|
Добавлено: Вс фев 27, 2011 14:22 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Просто красивый прием программирования.
Речь шла не зачем, а можно ли ...
Про округление. Требуемая точность обеспечивается здесь не правилом округления. По сути я записываю число с плавающей запятой в двоичном виде и оставляю только 16 двоичных цифр после запятой. Потом умножаю на 2^16 и получается целое. В целых числах и считаю. Но не обязательно-же 16. Можно больше, если точность нужна больше.
Чем такая кухня отличается от float ? Во float кроме мантиссы мы имеем ещё и порядок. И из-за введения этого порядка быстродействие рассчетов падает катастрофически. Но порядок - вещь гнилая. Все равно если числа различаются двоичным порядком больше, чем длина мантиссы в битах, вы их и сложить-то уже не сможете. Большее проглотит меньшее. Порядок у чисел в рассчетах все равно должен быть сопоставимым, так-что он малополезен. Поэтому лучше прикинуть сколько бит хватит слева от запятой и сколько справа и считать все в целых.
Просто красивый прием программирования.
Речь шла не зачем, а можно ли ...
Про округление. Требуемая точность обеспечивается здесь не правилом округления. По сути я записываю число с плавающей запятой в двоичном виде и оставляю только 16 двоичных цифр после запятой. Потом умножаю на 2^16 и получается целое. В целых числах и считаю. Но не обязательно-же 16. Можно больше, если точность нужна больше.
Чем такая кухня отличается от float ? Во float кроме мантиссы мы имеем ещё и порядок. И из-за введения этого порядка быстродействие рассчетов падает катастрофически. Но порядок - вещь гнилая. Все равно если числа различаются двоичным порядком больше, чем длина мантиссы в битах, вы их и сложить-то уже не сможете. Большее проглотит меньшее. Порядок у чисел в рассчетах все равно должен быть сопоставимым, так-что он малополезен. Поэтому лучше прикинуть сколько бит хватит слева от запятой и сколько справа и считать все в целых.
|
|
|
|
Добавлено: Вс фев 27, 2011 05:22 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Цитата: нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде. Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ?
Надо не забывать, существует несколько правил округления, и не все обеспечат требуюмую точность.
[quote] нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде. Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ? [/quote] Надо не забывать, существует несколько правил округления, и не все обеспечат требуюмую точность.
|
|
|
|
Добавлено: Сб фев 26, 2011 23:54 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Ethereal писал(а): Именно в целочисленном формате и делать. Все числа, которые ты мыслишь как числа с плавающей запятой при таких рассчетах, нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде. Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ? Тогда для этих чисел сложение и вычитание - это сложение и вычитание. А умножение - умножить и 16 раз сдвинуть вправо. Деление - 16 раз сдвинуть влево и поделить. В таком вот аксепте. А зачем это все делать для OpenGL, который прекрасно воспринимает форматы с плавающей точкой?
[quote="Ethereal"]Именно в целочисленном формате и делать. Все числа, которые ты мыслишь как числа с плавающей запятой при таких рассчетах, нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде. Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ? Тогда для этих чисел сложение и вычитание - это сложение и вычитание. А умножение - умножить и 16 раз сдвинуть вправо. Деление - 16 раз сдвинуть влево и поделить. В таком вот аксепте.[/quote] А зачем это все делать для OpenGL, который прекрасно воспринимает форматы с плавающей точкой?
|
|
|
|
Добавлено: Сб фев 26, 2011 21:48 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Хищник писал(а): Antender писал(а): И кстати, а как насчет, например, стыковки текстур в трехмерных сценах, если ее делать в целочисленном формате?
Именно в целочисленном формате и делать. Все числа, которые ты мыслишь как числа с плавающей запятой при таких рассчетах, нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде. Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ? Тогда для этих чисел сложение и вычитание - это сложение и вычитание. А умножение - умножить и 16 раз сдвинуть вправо. Деление - 16 раз сдвинуть влево и поделить. В таком вот аксепте.
[quote="Хищник"][quote="Antender"]И кстати, а как насчет, например, стыковки текстур в трехмерных сценах, если ее делать в целочисленном формате? [/quote][/quote] Именно в целочисленном формате и делать. Все числа, которые ты мыслишь как числа с плавающей запятой при таких рассчетах, нужно иметь умноженными на 65536 и округленными. Т.е. в целом виде. Пяти знаков после запятой ведь хватит для обеспечения требуемой точности ? Тогда для этих чисел сложение и вычитание - это сложение и вычитание. А умножение - умножить и 16 раз сдвинуть вправо. Деление - 16 раз сдвинуть влево и поделить. В таком вот аксепте.
|
|
|
|
Добавлено: Сб фев 26, 2011 21:27 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
тема перемещена, т.к. находится не в том разделе.
тема перемещена, т.к. находится не в том разделе.
|
|
|
|
Добавлено: Ср сен 29, 2010 19:27 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
|
|
|
Добавлено: Пт сен 17, 2010 17:45 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Antender писал(а): А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF. Кварк отлично подходит для обучения. И даже больше, чем спф - т. к. кварк намного проще.
[quote="Antender"]А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF.[/quote] Кварк отлично подходит для обучения. И даже больше, чем спф - т. к. кварк намного проще.
|
|
|
|
Добавлено: Чт сен 09, 2010 17:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Antender писал(а): Плавающая запятая - это конечно хорошо, но в большинстве случаев она не нужна. Например в книгах по С настоятельно не рекомендуют использовать плавающую запятую для циклов, для денежных сумм и в других местах. Разброс целых чисел от +2 миллиардов до -2 миллиардов более чем достаточен. Плавующую запятую в основном используют для приблизительных физических расчётов с гигантскими числами. Не стоит говорить за всех. Тем более не стоит в паре предложений делать массу неточных, а то и некорректных высказываний. Плавающая точка нужна отнюдь не только для работы с "гигантскими" числами, а уж пассаж " приблизительные физические расчеты" меня даже развеселил. Ничего, что число двойной точности имеет в полтора раза больше бит мантиссы, чем в диапазоне "от +2 до -2 миллиардов"? И кстати, а как насчет, например, стыковки текстур в трехмерных сценах, если ее делать в целочисленном формате? Antender писал(а): Кроме того, чтобы использовать числа с плавающей запятой в форте нужна хитрая конвертация в число двойной точности, затем это число надо положить на дополнительный стек, затем использовать другие операции для подсчётов, затем если конвертировать обратно, число будет округляться. Овчинка не стоит выделки. "В форте" никакая конвертация не нужна. Преобразованием чисел занимается непосредственно сопроцессор, и занимается аппаратно. Antender писал(а): А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF. Не в обиду автору сообщения, не рановато ли делать всеобъемлющие выводы по применимости тех или иных трансляторов?
[quote="Antender"]Плавающая запятая - это конечно хорошо, но в большинстве случаев она не нужна. Например в книгах по С настоятельно не рекомендуют использовать плавающую запятую для циклов, для денежных сумм и в других местах. Разброс целых чисел от +2 миллиардов до -2 миллиардов более чем достаточен. Плавующую запятую в основном используют для приблизительных физических расчётов с гигантскими числами.[/quote] Не стоит говорить за всех. Тем более не стоит в паре предложений делать массу неточных, а то и некорректных высказываний. Плавающая точка нужна отнюдь не только для работы с "гигантскими" числами, а уж пассаж "[i]приблизительные [/i]физические расчеты" меня даже развеселил. Ничего, что число двойной точности имеет в полтора раза больше бит мантиссы, чем в диапазоне "от +2 до -2 миллиардов"? :) И кстати, а как насчет, например, стыковки текстур в трехмерных сценах, если ее делать в целочисленном формате? [quote="Antender"]Кроме того, чтобы использовать числа с плавающей запятой в форте нужна хитрая конвертация в число двойной точности, затем это число надо положить на дополнительный стек, затем использовать другие операции для подсчётов, затем если конвертировать обратно, число будет округляться. Овчинка не стоит выделки.[/quote] "В форте" никакая конвертация не нужна. Преобразованием чисел занимается непосредственно сопроцессор, и занимается аппаратно. [quote="Antender"]А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF.[/quote] Не в обиду автору сообщения, не рановато ли делать всеобъемлющие выводы по применимости тех или иных трансляторов? :)
|
|
|
|
Добавлено: Ср сен 01, 2010 23:26 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Antender писал(а): Овчинка не стоит выделки. На процессорах, поддерживающих плав. точку аппаратно, сделать не сложно. А где нет поддержки лучше не делать - это сложно и медленно получится.
[quote="Antender"]Овчинка не стоит выделки.[/quote] На процессорах, поддерживающих плав. точку аппаратно, сделать не сложно. А где нет поддержки лучше не делать - это сложно и медленно получится.
|
|
|
|
Добавлено: Ср сен 01, 2010 21:12 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
<Кроме того, чтобы использовать числа с плавающей запятой в форте нужна хитрая конвертация в число двойной точности, затем это число надо положить на дополнительный стек, затем использовать другие операции для подсчётов, затем если конвертировать обратно, число будет округляться. Овчинка не стоит выделки.>
Плавающая запятая всегда нужна, например в инженерных расчетах (геодезия, геология и т.п. ) где требуется достичь наибольшей точности. "Целочисленная апроксимация" потребует намного больше затрат, чем использование команд арифметического сопроцессора, которые во многих фортах реализованы, в то же SPF
<Кроме того, чтобы использовать числа с плавающей запятой в форте нужна хитрая конвертация в число двойной точности, затем это число надо положить на дополнительный стек, затем использовать другие операции для подсчётов, затем если конвертировать обратно, число будет округляться. Овчинка не стоит выделки.>
Плавающая запятая всегда нужна, например в инженерных расчетах (геодезия, геология и т.п. ) где требуется достичь наибольшей точности. "Целочисленная апроксимация" потребует намного больше затрат, чем использование команд арифметического сопроцессора, которые во многих фортах реализованы, в то же SPF
|
|
|
|
Добавлено: Ср сен 01, 2010 20:13 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Книги, которые стоит почитать про плавающую запятую: Starting Forth Броуди ( и Thinking Forth ) Цитата: При современном уровне развития IT это несколько странный вопрос. Вроде бы уже не 80-е годы, чтобы писать "плавающая точка - это, конечно, хорошо, но требует непомерный объем ресурсов и сильно тормозит вычисления". Плавающая запятая - это конечно хорошо, но в большинстве случаев она не нужна. Например в книгах по С настоятельно не рекомендуют использовать плавающую запятую для циклов, для денежных сумм и в других местах. Разброс целых чисел от +2 миллиардов до -2 миллиардов более чем достаточен. Плавующую запятую в основном используют для приблизительных физических расчётов с гигантскими числами. В форте есть операция */ как раз для аппроксимации различных величин, Pi например при использовании целых чисел. Кроме того, чтобы использовать числа с плавающей запятой в форте нужна хитрая конвертация в число двойной точности, затем это число надо положить на дополнительный стек, затем использовать другие операции для подсчётов, затем если конвертировать обратно, число будет округляться. Овчинка не стоит выделки. А Quark, не в обиду автору, мало подходит для обучения. Возьмите лучше SPF.
Книги, которые стоит почитать про плавающую запятую:
Starting Forth Броуди ( и Thinking Forth )
[quote]При современном уровне развития IT это несколько странный вопрос. Вроде бы уже не 80-е годы, чтобы писать "плавающая точка - это, конечно, хорошо, но требует непомерный объем ресурсов и сильно тормозит вычисления".[/quote]
Плавающая запятая - это конечно хорошо, но в большинстве случаев она не нужна. Например в книгах по С настоятельно не рекомендуют использовать плавающую запятую для циклов, для денежных сумм и в других местах. Разброс целых чисел от +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.
Размеры стеков определены вот так: [code] MAXCF equ 1024 MAXLOOP equ 256 MAXSELECTORS equ 256 MAXLOCALS equ 1024 MAXFRAMES equ 256 [/code]
[code] Dstack rd 2048 [/code]
Что касается стеков: - стек данных и стек возвратов - стандартные стеки для Форта. Стек возвратов используется классическим для процессора образом - обеспечивать возврат из подпрограмм. Стек данных - массив в памяти с указателем глубины. - стек чисел с плавающей точкой представляет собой аппаратный стек сопроцессора, глубиной 8. - стек структур управления хранит идентификаторы структур управления при компиляции. Программисту, как правило, не нужен. В Форте этот стек часто не заводится, а необходимые данные лежат на стеке возвратов. - стек циклов - аналогично предыдущему, программисту напрямую не нужен. Хранит текущее и конечное значение счетчико цикла, а также адрес начала итерации цикла. - стек контекстов загрузки - хэндл файла, позиция в файле, содержимое TIB. Требуется для того, чтобы можно было продолжить интерпретацию файла после вложенной загрузки. - стек фреймов - экспериментальная конструкция в этом трансляторе. Используется для хранения указателей стека для слов FRAME{ }FRAME.
|
|
|
|
Добавлено: Ср сен 01, 2010 11:29 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Можно поподробнее про Quark?
Меня интересуют стеки. Требуется инфа: для чего каждый тип стека? Сколько байт отводится изначально каждому стеку? Каков формат хранения данных стека?
В этом Форте как я понял есть 6 стеков:
* стек данных * стек возвратов * стек чисел с плавающей запятой * стек структур управления * стек циклов * стек контекстов загрузки
Можно поподробнее про Quark?
Меня интересуют стеки. Требуется инфа: для чего каждый тип стека? Сколько байт отводится изначально каждому стеку? Каков формат хранения данных стека?
В этом Форте как я понял есть 6 стеков:
* стек данных * стек возвратов * стек чисел с плавающей запятой * стек структур управления * стек циклов * стек контекстов загрузки
|
|
|
|
Добавлено: Ср сен 01, 2010 10:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: Форт с плавающей запятой |
|
|
Antender писал(а): Если не секрет: а зачем Вам нужна плавающая запятая? При современном уровне развития IT это несколько странный вопрос. Вроде бы уже не 80-е годы, чтобы писать "плавающая точка - это, конечно, хорошо, но требует непомерный объем ресурсов и сильно тормозит вычисления". Собственно, вот страница проекта http://msyst.ru/?q=node/8 и описание http://www.msyst.ru/quark.pdf. Плавающая точка - это первое, что я в свое время сделал для Форта.
[quote="Antender"]Если не секрет: а зачем Вам нужна плавающая запятая?[/quote] При современном уровне развития IT это несколько странный вопрос. Вроде бы уже не 80-е годы, чтобы писать "плавающая точка - это, конечно, хорошо, но требует непомерный объем ресурсов и сильно тормозит вычисления".
Собственно, вот страница проекта [url]http://msyst.ru/?q=node/8[/url] и описание [url]http://www.msyst.ru/quark.pdf[/url]. Плавающая точка - это первое, что я в свое время сделал для Форта.
|
|
|
|
Добавлено: Чт авг 26, 2010 23:22 |
|
|
|
|