Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Целочисленные методы вычислений, Как сделать алгоритм целочисленным 
:(
    Опции темы
val
  Дата 18.9.2003, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Уважаемые участники форума!
Не могли вы поделиться общей информацией, связанной с принципами перевода алгоритма, оперирующего с действительными числами, на целочисленную арифметику. К примеру, алгоритм выполняет какие-то операции над действительными числами, но хотелось, чтобы все операции проводились в целочисленной форме. Данная проблема возникает при использовании целочисленных процессоров и переноса на них различных математических моделей. Общие сведения про форматы хранения дробных чисел типа Q14, Q15 имеются, но хотелось бы капнуть глубже... В большей степени интересует решение систем, интерполяция...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
RAN
Дата 18.9.2003, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: нет
Всего: 6



Интересно. С pentium'ами об этом люди уже забыли. Я посмотрю, что у меня осталось с прошлых лет. Напишу чего-нибудь. Но, по-моему, есть инфа только про операции сложения, умножения и т.п. А решение систем и интерполяция - это уже алгоритмы, которые пользуются сложением и т.п. Сами они ни сколько не меняются.

PM MAIL ICQ   Вверх
val
Дата 18.9.2003, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Даже вроде бы есть специальный раздел математики, который занимается целочисленными вычисленниями.


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
val
Дата 22.9.2003, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Цитата
Даже вроде бы есть специальный раздел математики, который занимается целочисленными вычисленниями.


Этот раздел называется "целочисленное программирование", по другим данным - "целочисленное исчисление". В общем, если кто-то сталкивался с практикой или теорией перевода программного кода в целочисленный вид прошу - отзовитесь. Нужны выши консультации или ссылки на соотв. информацию...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
val
Дата 22.9.2003, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Цитата
Я посмотрю, что у меня осталось с прошлых лет.

Буду очень признателен...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
RAN
Дата 22.9.2003, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: нет
Всего: 6



Цитата
Буду очень признателен...

Не осталось ничего ни на бумаге, ни в компе. Однако, я думаю, что ты и так всё это знаешь. Вот немного теории нашёл. http://old.sgu.ru/kafedra/teorin/Lekciya_55.htm.
А методу перевода работающей проги на другую платформу я предлагал в другой теме. Если на C++, то надо операторы перегружать. На asm придётся переписывать код.

Напиши поподробнее о программе, которую переводишь.
PM MAIL ICQ   Вверх
podval
Дата 22.9.2003, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 18
Всего: 62



Цитата(val @ 22.9.2003, 11:53)
Цитата
Даже вроде бы есть специальный раздел математики, который занимается целочисленными вычисленниями.


Этот раздел называется "целочисленное программирование", по другим данным - "целочисленное исчисление". В общем, если кто-то сталкивался с практикой или теорией перевода программного кода в целочисленный вид прошу - отзовитесь. Нужны выши консультации или ссылки на соотв. информацию...

Давайте разложим все по полкам. Знаете, что такое математическое программирование? Это раздел прикладной математики, который занимается решением задач оптимального управления, т.е. задач на отыскание наилучшего в заранее оговоренном смысле способа осуществления целенаправленного динамического процесса. Данный процесс, как правило, может быть описан дифференциальными, интегральными и иными соотношениями, зависящими от параметров, подлежащих определению. Данные соотношения называют целевыми функционалами (функциями), а параметры - управляемыми переменными. Как правило, на целевые функции накладывают ряд условий и ограничений, существенно осложняющие поиск оптимального решения.
В задачах математического программирования в качестве дополнительного условия на значения управляемых параметров может быть наложено условие целочесленности (иногда дискретности). В этом случае имеет место задача целочисленного (дискретного) программирования. Методы и алгоритмы решения таких задач составляют раздел "Целочисленное программирование".

Однако целочисленные вычисления встречаются не только в методах оптимизации. Существуют способы выполнения различного рода преобразований (в т.ч. Фурье, вейвлет), выполняемых в целочисленном виде. Это делают по разным причинам. Где-то специально для внедрения ПО в специализированное вычислительное устройство. Где-то эта необходимость продиктована целочисленной (или дискретной) природой исходных данных, и за счет целочисленных вычислений (над целочисленными данными!) стараются добиться высокой точности либо быстродействия.
PM WWW ICQ   Вверх
podval
Дата 23.9.2003, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 18
Всего: 62



val
Постарайся найти книгу Маклеллан, Рейдер. Применение теории чисел в цифровой обработке сигналов. В магазине искать бесполезно, разве что в "Старой книге", так что дуй в библиотеку. Эта книга тебе точно поможет.
PM WWW ICQ   Вверх
val
Дата 23.9.2003, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Цитата
так что дуй в библиотеку

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


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
RAN
Дата 23.9.2003, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: нет
Всего: 6



Цитата
анализ показал, что строгой методики конвертации плавующей запятой в фиксированную пока не разработано

Я думал, что ты хочешь с плавающей работать на целочисленном процессоре. Если так, то в фиксированную переводить не надо. Мне кажется надо сразу определиться с каким представлением ты будешь работать и использовать его везде, так ошибок многих избежишь.
Плавающая запятая обеспечивает большой диапазон с определённой точность (по кол-ву значащих цифр в числе), зато вычисления с фиксированной запятой значительно быстрее и проще, как следствие более короткий код (если счёт идёт на байты smile.gif ), но диапазон короче.
Ты какие алгоритмы сейчас ищешь? И с каким представлением числа работаешь?
PM MAIL ICQ   Вверх
podval
Дата 23.9.2003, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 18
Всего: 62



Цитата
зато вычисления с фиксированной запятой значительно быстрее и проще, как следствие более короткий код

C этой точки зрения интересно будет посмотреть, что сделано в системе MATLAB. В его состав входит такой Fixed-Point Blockset, позволяющий моделировать эффекты, возникающие в системах, которые используют арифметику с фиксированной точкой.
http://www.matlab.ru/fixedpoint/default.asp (на странице важные ссылки!)
PM WWW ICQ   Вверх
val
Дата 24.9.2003, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Цитата
Ты какие алгоритмы сейчас ищешь? И с каким представлением числа работаешь?

У меня есть программа, написанная на С++, с использованием классов, типов с плавующей запятой, статических и динимических структур данных. Такой код неуспевает в 100 раз.
Я уже избавился от классов и динимических структур данных, осталость избавиться от плавующей запятой. Нужна методика конвертации кода с плавующей запятой с фиксированную...




--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
Crait
Дата 24.9.2003, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: 1
Всего: 1



Совет не универсальный, но...
Предположим, в текущей постановке задачи какие-то данные
принимают диапазон [-1..1] и с плавающей точкой. А на твоей системе
быстро выполняются действия с 32-разрядным int'ом (+-2000000000).
Так вот, домножай твои данные на эти 2 миллиарда и - вперед,
с fixed point.
Ситуации бывают, конечно, всякие, например, когда промежуточные
результаты получаются гораздо больше по модулю, чем входные данные.
Что же, тогда домножай входные данные менее чем на два миллиарда.
Все это, конечно, тривиально и не всегда применимо.
Floating point на то и изобрели, чтобы поменьше зависеть
от такого рода особенностей.

Это сообщение отредактировал(а) Crait - 24.9.2003, 16:03
PM MAIL   Вверх
podval
Дата 25.9.2003, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 18
Всего: 62



Цитата
Ситуации бывают, конечно, всякие, например, когда промежуточные
результаты получаются гораздо больше по модулю, чем входные данные.

А вот хороший способ борьбы с переполнениями - воспользоваться китайской теоремой об остатках. Строишь свою арифметику в остаточных классах и вперед! Подробности есть в упомянутой книге МакКлеллана и Рейдера, а также у Кнута (2-й том, у него называется, кажись, "модулярные вычисления").
PM WWW ICQ   Вверх
val
Дата 25.9.2003, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Я порыл в интернете по моей проблеме и нашел такую вещь как цепные дроби... Утверждают, что можно с помощью цепных дробей представить совокупностью целых чисел любое действительное число... Кто-то даже пытался решать системы уравнений на арифметике, основанной на цепных дробях... Если кто знаком с подобной проблематикой или имеет ссылки на конкретное применение цепных дробей в рамках целочисленных вычислений отзовитесь, пожалуйста...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.