2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 17:01 


27/11/15

115
Как лучше запрограммировать вот такую формулу?
Изображение
Если всё занести под один корень (вместо квадрата 6 множителей квадрат частного 6/6) изменится ли что-нибудь принципиально в плане точности?
Все числа порядка 1000-10000, используется тип double.

 Профиль  
                  
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 17:26 
Заслуженный участник


27/04/09
28128
Важно ведь не заносить или выносить, важно выделять одинаковые часто встречаемые подвыражения.

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


27/11/15

115
arseniiv
Это в плане скорости. А что в плане точнисти?
В таких масштабах вроде уже режутся знаки.

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


06/10/08
6422
Знаки режутся при любом умножении, но относительная погрешность остается в приличных пределах и ее можно оценить.

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

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


04/10/17

153
Советую перейти на 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 
Заслуженный участник


20/08/14
11798
Россия, Москва
Или проверить вычисления на PARI/GP, там точность можно указать чуть ли не любую (попробовал 9999 цифр - вроде похоже).
Любой из этих переходов сильно замедлит скорость вычислений! Потому если время критично, то не встраивать в рабочую программу, а лишь запустить для тестов и сравнений.

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


28/07/17

317
Использовать длинную арифметику. Точность 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 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
alhimikoff, саму формулу набирали в Маткаде? Уж больно смахивает.

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


27/11/15

115
Aritaborian
Да.
Формула, кстати, вылезает из задачи "на какое число надо умножить радиус-вектора концов отрезка, чтобы он коснулся эллипсоида". Вроде ничего сложного, а выходит вот так.
Вбил в программу как есть. Свою задачу успешно выполняет, но для графики особой точности и не надо.

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


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

 Профиль  
                  
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение16.10.2017, 22:59 
Заслуженный участник


27/04/09
28128

(Оффтоп)

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

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


11/06/12
10390
стихия.вздох.мюсли

(arseniiv)

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

 Профиль  
                  
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение19.10.2017, 09:53 
Экс-модератор
Аватара пользователя


23/12/05
12064
Как я понимаю, если входные данные ограничены точностью 4 знаков(1000-10000 - целые? Или я ошибаюсь?), то требовать на выходе бОльшую точность как-то некрасиво. При работе с double такая точность будет получена за исключением тех случаев, когда будут разности близких по величине чисел - таких, что их разница попадает за пределы точности double.

 Профиль  
                  
 
 Re: Перемножение 12 чисел это очень плохо?
Сообщение19.10.2017, 10:29 


07/08/14
4231
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 
Экс-модератор
Аватара пользователя


23/12/05
12064
откуда вы взяли $10^{200}$ - там нет таких порядков (я понимаю, что это вы образно, но все же), и нет смысла рассуждать о вычислении отдельных множителей для выражения у которого нет множителей: в числителе сумма и в знаменателе корень из суммы.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group