lqp - Вопрос к залу - вычислительное
August 4th, 2015
02:07 pm

[Link]

Previous Entry Add to Memories Tell A Friend Next Entry
Вопрос к залу - вычислительное
Что-то туплю, не могу решить задачку.

Есть два вектора X и X'=X+dX, X >>> dX. Для понимания |X| это примерно сотни километров, |dX| - миллиметры. Надо найти |X|-|X'| с максимально возможной точностью.

У нас есть несколько формул, которые, есть основания полагать, дадут лучший результат, чем лобовой подход. Однако их сравнительная точность зависит от разрядности данных, архитектуры процессора, математической библиотеки и прочих обстоятельств от нас скрытых, так что сравнить аналитически не получится.

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

Tags:

(20 comments | Leave a comment)

Comments
 
From:(Anonymous)
Date:August 4th, 2015 - 01:32 pm
(Link)
в коробочку пидараса
From:(Anonymous)
Date:August 4th, 2015 - 01:40 pm
(Link)
Слышь ты, математишка жалкий. уёбывай со своими формулами.

>вычисление одной элементарной функции/арифметической операции на невырожденных аргументах
Совсем ебанутый дебил, ахуеть.
From:(Anonymous)
Date:August 4th, 2015 - 01:49 pm
(Link)
Надо помолиться.
From:(Anonymous)
Date:August 4th, 2015 - 02:00 pm
(Link)
ща помолимся
в жопу подолбимся
From:[info]tzirechnoy.livejournal.com
Date:August 4th, 2015 - 02:12 pm
(Link)
> так что сравнить аналитически не получится.

Хрень какая-то. Мне такое непредставимо, да.

В общем, похожэ, как-то неправильно сформулирована задача, и ты хочешь что-то, чего я не увидел за этой формулировкой.
From:[info]lqp
Date:August 4th, 2015 - 02:40 pm
(Link)
Ну смотри. Пусть X=(x,y), dX=(dx,dy)

Считать нам по формуле

dl=dx*x/|X|+dy*y/|X|

или по формуле
a=atan2(y,x),
dl=dx*sin(a)+dy*cos(a)

зависит от того, насколько хороша у нас тригонометрия. Может оказаться что по второй будет точнее, хоть там и лишнее преобразование.

Иииии ... может это физически и возможно, но я не возьмусь проверять качество математической библиотеки, и высчитывать ее погрешность.
From:[info]tzirechnoy.livejournal.com
Date:August 4th, 2015 - 05:32 pm
(Link)
Тригонометрия на аппаратной плавучке, насколько я помню, даёт точный результат. В смысле -- в пределах точности представления числа.

Учитывая, что у тебя в первом случае ещё и два умножэния... То дажэ без учёта, что первая формула -- приближённая, второй явно лучшэ.
From:(Anonymous)
Date:August 4th, 2015 - 02:21 pm
(Link)
проблема уровня школьной тригонометрии
удачную картинку нарисовать и выбрать несколько примеров
From:[info]lqp
Date:August 4th, 2015 - 02:27 pm
(Link)
Да нет проблем. Примеров у меня есть уже с десяток. Вопрос в том, какие из них будут лучше.
From:(Anonymous)
Date:August 4th, 2015 - 02:37 pm
(Link)
зависит от ваших формул и исходной задачи
From:[info]tzirechnoy.livejournal.com
Date:August 4th, 2015 - 02:25 pm
(Link)
Ну и да, банальное: возьми bc и установи ему scale так побольшэ. Ну, учитывая, что каждая операцыя откусывает где-то по одной двоичной цыфре scale -- посчитай просто количество операцый, и добавь столько десятичных цыфр, по сравнению с точностью твоих чисел.
From:[info]lqp
Date:August 4th, 2015 - 02:44 pm
(Link)
Ну да, я как-то тоже склоняюсь к тому чтобы взять какой-нибудь bignum с квадриллионом значащих цифр и в нем посчитать. Но я подозреваю, что от проблем с тригонометрией это все равно не спасет.
From:(Anonymous)
Date:August 4th, 2015 - 02:54 pm
(Link)
простите за тупость, а разложение в ряд и оценка руками не спасает от таких проблем?
From:[info]tzirechnoy.livejournal.com
Date:August 4th, 2015 - 05:22 pm
(Link)
Спасёт. Я bc как-то проверял, как он pi считает ( a(1)*4 ) -- отлично считает, чо, десятка тысяч знаков дажэ реально дождаться.

И вообще -- если так боишься, то считай без тригонометрии, тебе жэ примеры нужны.
[User Picture]
From:[info]tiphareth
Date:August 4th, 2015 - 03:29 pm
(Link)
в ряд разложить же
если координаты X х_1, ..., х_n, а dX = d_1, ..., d_n
то |X+dX|^2= \sum x_i^2+\sum d_i^2 + 2 \sum x_i d_i
кладем A=|Х|, B= A^{-2}(\sum d_i^2 + 2 \sum x_i d_i)
получаем |X+dX|-|Х|=A*(1+B)^{1/2}
раскладываем в ряд по B, которое величина чрезвычайно
маленькая по условию (порядка 10^{-8}).
2-3 значимых членов уже достаточно
разложение в ряд для (1+B)^{1/2} есть например тут
https://en.wikipedia.org/wiki/Square_root



Привет
[User Picture]
From:[info]tiphareth
Date:August 4th, 2015 - 04:00 pm
(Link)
очепятался
вместо |X+dX|-|Х|=A*(1+B)^{1/2} надо
|X+dX|-|Х|=A*(1+B)^{1/2} -А
From:(Anonymous)
Date:August 4th, 2015 - 04:27 pm
(Link)
гавна поешь, клоун
From:(Anonymous)
Date:August 4th, 2015 - 03:35 pm
(Link)
Vam neizvestno o sustchestvovanii bibliotek dlya vychisleniya
s neogranichennym chislom razryadov?
I kompyuternyh programm vysokogo urovnya kotorye ih ispolzuyut?

Postaviv biblioteku, pishete svoyu programmu/skript
Zapustiv programmu vysokogo urovnya, berete i schitaete v nej to, chto van nuzhno.

Naprimer, samaya izvestnaya otkrytaya programma simvolnyh vychislenij osnovana na bibliotekah s proizvolnoj tochnostyu. Vy zadaete tochnost komandoj, zatem schitaete kak na kalkulatore.
From:[info]tristes_tigres
Date:August 4th, 2015 - 06:55 pm
(Link)
Если сделать анализ ошибок не хватает знаний или времени, то не меньший авторитет, чем Вильям Кахан, рекомендует считать с расширенной точностью, а также менять аппаратный флаг направления округления ( к ближайшему целому, к нулю, к бесконечности) и сравнивать результаты. А вообще-то динамический диапазон не такой большой DX/X ~ 10^-8 , половина диапазона двойной точности плавающей точки double. При этом встроенные тригонометрические функции должны давать ошибку не больше бита последнего разряда мантисс, а арифметические операции - половину бита последнего разряда. Наконец, библиотеки типа mpmath имеют встроенные тригонометрические и спецфункции произвольной точности
From:[info]alyashin.livejournal.com
Date:August 8th, 2015 - 02:07 am

Оценка разницы длин

(Link)
EstimationWithPic.png
Powered by LJ.Rossia.org