Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2013, 23:57   #1
glabz
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 10
Восклицание Длинная арифметика с фиксированной точкой

Доброго времени суток уважаемые жители форума.
Столкнулся с проблемой ошибки округления, при решении комплексной системы уровненный из 20 и более неизвестных точность таит просто на глазах (По сравнению с тем же MathCAD). Как я понял, проблема решается использованием длиной арифметики (возможно с использованием фиксированной точки). Но проблема в том что все примеры которые находил в интернете, используют целочисленные больше числа. В моем же примере, используются иррациональные числа, для более менее адекватного решения нужно, хотя бы, 40-60 знаков после запятой (иногда лучше и больше ),желательно что бы были как можно меньшие затраты времени на вычисления.
Был бы, очень признателен за подсказку где рыть, за алгоритм, код или литературу где будет пояснено основные математические операции с данными числами.
Так же, по возможности попросил бы сильно не оффтопить.
Заранее большое спасибо.
glabz вне форума Ответить с цитированием
Старый 16.03.2013, 07:26   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

умножай все на 10^60 и работай как с целыми
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 16.03.2013, 08:01   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Был бы, очень признателен за подсказку где рыть, за алгоритм, код или литературу где будет пояснено основные математические операции с данными числами.
Я выкладывал здесь такой код, описание его работы есть в ныне не работающем журнале ПРОграммист. 4 основных действия


----ДОБАВЛЕНО----
http://programmersforum.ru/showthrea...5%F1%F2&page=2
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 16.03.2013 в 08:38.
Utkin вне форума Ответить с цитированием
Старый 16.03.2013, 11:28   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Вообще-то проблема обычно решается использование специальных численных методов для работы с плохо обусловленными матрицами.
Повышение точности представления чисел в данном случае неэффективно.
s-andriano вне форума Ответить с цитированием
Старый 16.03.2013, 11:54   #5
glabz
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 10
По умолчанию

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

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

Еще рас Всем огромное спасибо.
glabz вне форума Ответить с цитированием
Старый 16.03.2013, 15:05   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от glabz Посмотреть сообщение
@s-andriano Я работаю как рас с плохо обусловленными матрицами использую специальные алгоритмы упаковки и оптимизации расчета, но опят же, при их большой размерности просто катастрофически падала точность.
Тогда мне непонятен выбор представления данных именно с фиксированной точкой.
Дело в том, что оптимальность того или иного представления зависит от набора операций, которые предстоит выполнять.
Фиксированная точка - для сложения и вычитания,
плавающая точка - для умножения и деления.
Насколько я представляю, при решении системы уравнений умножение и деление - одни из основных, поэтому, вроде бы, следовало отдать предпочтение представлению с плавающей точкой.
С другой стороны, основная головная боль проистекает от разности больших чисел, т.е. от операции вычитания, для которой и нужны данные с максимальной разрядностью.
Я бы на Вашем месте разработал арифметику с длинными числами с плавающей точкой, для чего взял за основу какой-либо из модулей по работе с большими целыми числами, дополнил числа полем порядка и откорректировал реализацию арифметических операций.
s-andriano вне форума Ответить с цитированием
Старый 16.03.2013, 15:24   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Я выкладывал здесь такой код, описание его работы есть в ныне не работающем журнале ПРОграммист. 4 основных действия


----ДОБАВЛЕНО----
http://programmersforum.ru/showthrea...5%F1%F2&page=2
Скачал и пытался посмотреть.
\Увы, не обнаружил даже намеков на документацию, а код откомментирован крайне убого (по крайней мере, в интерфейсной части).
Раз журнал уже не работает, где можно взять документацию?
s-andriano вне форума Ответить с цитированием
Старый 18.03.2013, 10:33   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Раз журнал уже не работает, где можно взять документацию?
Сам журнал в свободном доступе.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 18.03.2013, 11:40   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А ссылочку на этот свободный доступ можно?
Ну или, по минимуму, указание года издания, номера, тома и диапазона страниц.
s-andriano вне форума Ответить с цитированием
Старый 18.03.2013, 14:27   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

https://www.google.ru/search?client=...utf-8&oe=utf-8
Цитата:
Ну или, по минимуму, указание года издания, номера, тома и диапазона страниц.
Я не настолько в себя влюблен, чтобы записывать за собой . Единственно, прежде чем качать посмотрите на скрины обложек, возможно там будет указание на то, что в данном номер есть это статья.

Нашел - март 2011, №12
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 18.03.2013 в 14:31.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длинная арифметика Свитозар Помощь студентам 0 26.09.2012 19:07
[C++] Деление произвольных двоичных чисел с фиксированной точкой с использованием прямых кодов Java Помощь студентам 0 04.06.2011 17:22
Длинная арифметика. Steam.dll Помощь студентам 8 03.04.2011 17:47
Длинная арифметика Khelleos Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 20.12.2010 09:08
Длинная арифметика чисел с плавающей точкой RIO Общие вопросы C/C++ 3 14.04.2010 17:11