Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Igor3D
943 / 476 / 43
Регистрация: 01.10.2012
Сообщений: 2,364
#1

Оптимизировать вычисление формулы - C++

11.02.2013, 17:30. Просмотров 394. Ответов 5
Метки нет (Все метки)

Добрый день

Расчет совсем простой,
C++
1
2
float R = ((dotProduct(vec1, vec2) / length(vec1) + 1) / 2;
return pow(R, 1 / 4.0);
где dotProduct - скалярное произведение, а length - длина вектора

Но кратность вызова очень высока, как переделать формулу чтобы считать быстрее?

Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2013, 17:30     Оптимизировать вычисление формулы
Посмотрите здесь:

Вычисление текстовой формулы - C++
Есть электронная таблица, в ячейке записано что то типа: =C1+AC234/A1. Для вычисления такой формулы нужно для каждого адреса ячейки (C1,...

Цикл: Вычисление значения согласно заданной формулы - C++
Здравствуйте. Не понимаю даже как подступиться к задаче. Заранее, спасибо) Через циклы написать программу выполняющую: ...

Помогите найти ошибку в программе. Вычисление формулы. - C++
Написал программу, которая считает формулу, но она не работает. Компилятор ошибок не выдает, но когда вводишь х выдает что-то вроде...

Вычисление значения математической формулы введённой через консколь - C++
Через консоль я заполняю массив char какой-то неизвестной заранее формулой, например 2+2. Так вот как мне посчитать значение этой формулы?...

Оптимизировать функцию - C++
Помогите оптимизировать функцию она работает правильно только очень медленно :cry: уже несколько дней над ней сижу и ничего не выходит ...

Нужно оптимизировать - C++
Есть задание, есть готовый код. Но он не проходит скоростной режим, нужно оптимизировать, помогите плз) #include <iostream> ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Том Ардер
Модератор
Эксперт по математике/физике
3736 / 2349 / 293
Регистрация: 15.06.2009
Сообщений: 4,202
11.02.2013, 17:43     Оптимизировать вычисление формулы #2
1) заменить возведение в степень (логарифм + экспонента) на квадратный корень (дважды);
2) вместо float использовать double (не будет преобразований типа).
И всё это лучше обсуждать в разделе по плюсам. Куда именно перенести?
Igor3D
943 / 476 / 43
Регистрация: 01.10.2012
Сообщений: 2,364
12.02.2013, 11:56  [ТС]     Оптимизировать вычисление формулы #3
Цитата Сообщение от Том Ардер Посмотреть сообщение
1) заменить возведение в степень (логарифм + экспонента) на квадратный корень (дважды);
2) вместо float использовать double (не будет преобразований типа).
И всё это лучше обсуждать в разделе по плюсам. Куда именно перенести?
Не очень понял причем тут плюсы для начинающих, ну да ладно, перенесли так перенесли.

Все равно многовато вызовов получается (3 корня, один в length). Как бы сделать табличку чтобы считать так
C++
1
2
double temp = dotProduct(vec1, vec2) / lengthSquared(vec1);
return Table(temp);  // используем предраcсчитанный массив с шагом напр 0.001
?
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
12.02.2013, 14:15     Оптимизировать вычисление формулы #4
Цитата Сообщение от Igor3D Посмотреть сообщение
// используем предраcсчитанный массив с шагом напр 0.001
Массив то наверно получится здоровенный. Так то вроде такую табличку сделать не сложно: (int)(temp * 1000) + shift в качестве индекса и всё.
Igor3D
943 / 476 / 43
Регистрация: 01.10.2012
Сообщений: 2,364
12.02.2013, 22:26  [ТС]     Оптимизировать вычисление формулы #5
Цитата Сообщение от gray_fox Посмотреть сообщение
Массив то наверно получится здоровенный.
Ничего, я переживу, скорость важнее
Цитата Сообщение от gray_fox Посмотреть сообщение
Так то вроде такую табличку сделать не сложно: (int)(temp * 1000) + shift в качестве индекса и всё.
А как расправиться с квадратом? Напоминаю
C++
1
2
3
4
5
6
7
8
9
void lengthSquared( const Vec3 & vec )
{
 return vec.x * vec.x + vec.y * vec.y + vec.z * vec.z;
}
 
void length( const Vec3 & vec )
{
 return sqrt(lengthSquared(vec3));
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 00:23     Оптимизировать вычисление формулы
Еще ссылки по теме:

Оптимизировать перебор - C++
Неделю учу С++, так что прошу не гадить. Надо уменьшить время работы. Задача: Вступление — Брат мой, Магистр Ордена хочет узнать...

Оптимизировать код - C++
Первое число входного потока - количество чисел Дальше идут те самые числа Надо найти кол-во пар чисел, для которых выполняется nums <=...

Оптимизировать код - C++
Доброго времени суток, как можно оптимизировать код что бы он быстрее работал ? Дана последовательность из n чисел a1, a2,..., an. C...

Как оптимизировать код? - C++
Вот такой код, написанный для микроконтроллера импульсного блока питания. Просто интересно мнение, что можно поменять и изменить для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
14.02.2013, 00:23     Оптимизировать вычисление формулы #6
Цитата Сообщение от Igor3D Посмотреть сообщение
А как расправиться с квадратом?
Незнаю. Можно попробовать вместо массива хэш-таблицу (с ключом pair(dot_product, length_squared), например) или двумерный массив, но вообще не факт, что так будет быстрее, чем каждый раз честно считать + объём памяти будет ещё больше.
Yandex
Объявления
14.02.2013, 00:23     Оптимизировать вычисление формулы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru