2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 17:01 
Как лучше запрограммировать вот такую формулу?
Изображение
Если всё занести под один корень (вместо квадрата 6 множителей квадрат частного 6/6) изменится ли что-нибудь принципиально в плане точности?
Все числа порядка 1000-10000, используется тип double.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 17:26 
Важно ведь не заносить или выносить, важно выделять одинаковые часто встречаемые подвыражения.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 17:59 
arseniiv
Это в плане скорости. А что в плане точнисти?
В таких масштабах вроде уже режутся знаки.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 18:13 
Аватара пользователя
Знаки режутся при любом умножении, но относительная погрешность остается в приличных пределах и ее можно оценить.

В плане точности проблема бедет не с умножениями, а с вычитаниями (если $x_0 \approx y_0 \approx z_0$ и $A \approx B \approx C$, то вычитания снизу могут дать большую относительную ошибку).

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 19:16 
Советую перейти на long double - точность 19 десятичных знаков (интеловский компилятор, только соответствующую опцию для компиляции не забыть) или на интеловский фортран - точность 32 десятичных знака. Сравнив результаты, сразу поймете, корректны ли Ваши расчеты. Также советую 3 книги: Nicholas J. Higham "Accuracy and Stability of Numerical Algorithms", Jean-Michel Muller, ... "Handbook of Floating-Point Arithmetic" и книгу Форсайта по численным методам (первое издание!): в ней ознакомьтесь с материалом, посвященным корректному решению квадратного уравнения.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 19:25 
Или проверить вычисления на PARI/GP, там точность можно указать чуть ли не любую (попробовал 9999 цифр - вроде похоже).
Любой из этих переходов сильно замедлит скорость вычислений! Потому если время критично, то не встраивать в рабочую программу, а лишь запустить для тестов и сравнений.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 22:01 
Использовать длинную арифметику. Точность 100%. Вот пример вычисления верхней части уравнения:

a 98765, a2 9754525225
b 87654, b2 7683223716
c 76543, c2 5858830849

A 65432, A2 4281346624
B 54321, B2 2950771041
C 43210, C2 1867104100

A2*b2*c2 192723568670173146157943951616
B2*a2*c2 168636899331970311453980582025
C2*a2*b2 139932356453696967687278010000

сумма 501292824455840425299202543641

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 22:11 
Аватара пользователя
alhimikoff, саму формулу набирали в Маткаде? Уж больно смахивает.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 22:48 
Aritaborian
Да.
Формула, кстати, вылезает из задачи "на какое число надо умножить радиус-вектора концов отрезка, чтобы он коснулся эллипсоида". Вроде ничего сложного, а выходит вот так.
Вбил в программу как есть. Свою задачу успешно выполняет, но для графики особой точности и не надо.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 22:57 
Аватара пользователя
alhimikoff в сообщении #1256217 писал(а):
Формула, кстати, вылезает из задачи "на какое число надо умножить радиус-вектора концов отрезка, чтобы он коснулся эллипсоида".
А то мы не поняли :mrgreen:
alhimikoff в сообщении #1256217 писал(а):
Свою задачу успешно выполняет, но для графики особой точности и не надо.
Так а что вам ещё нужно? Для вашей задачи (3D-визуализация) чрезмерная точность не нужна. (Только не подумайте, пожалуйста, что я поддерживаю именно этот путь в решении вашей задачи.)

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 22:59 

(Оффтоп)

Aritaborian в сообщении #1256221 писал(а):
чрезмерная точность не нужна
А если зумить? А то мне упорно в ассоциации к авторской задаче лезет Google Earth (и вообще любой аналогичный атлас).

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 23:06 
Аватара пользователя

(arseniiv)

Я так далеко в фантазиях не заходил. Мне представлялись какие-то статичные визуализации, скорее художественно-презентационного плана.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение19.10.2017, 09:53 
Аватара пользователя
Как я понимаю, если входные данные ограничены точностью 4 знаков(1000-10000 - целые? Или я ошибаюсь?), то требовать на выходе бОльшую точность как-то некрасиво. При работе с double такая точность будет получена за исключением тех случаев, когда будут разности близких по величине чисел - таких, что их разница попадает за пределы точности double.

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение19.10.2017, 10:29 
alhimikoff в сообщении #1256095 писал(а):
Если всё занести под один корень (вместо квадрата 6 множителей квадрат частного 6/6) изменится ли что-нибудь принципиально в плане точности?

Может получиться, что так
$y=\frac{10^{200}\cdot 10^{200}}{\sqrt{10^{200}\sdot 10^{200}}}$ не посчитает
а так
$y_1=\frac{10^{200}}{\sqrt{10^{200}}}$
$y_2=\frac{10^{200}}{\sqrt{10^{200}}}$
$y=y_1\cdot y_2$, посчитает
Использование чего-либо кроме двойной точности при десятичных дробях лично у меня всегда приводит к ошибкам в вычислениях даже на простых выражениях

 
 
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение19.10.2017, 10:41 
Аватара пользователя
откуда вы взяли $10^{200}$ - там нет таких порядков (я понимаю, что это вы образно, но все же), и нет смысла рассуждать о вычислении отдельных множителей для выражения у которого нет множителей: в числителе сумма и в знаменателе корень из суммы.

 
 
 [ Сообщений: 22 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group