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

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

Войти
Регистрация
Восстановить пароль
 
Igor3D
852 / 438 / 38
Регистрация: 01.10.2012
Сообщений: 2,209
#1

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

11.02.2013, 17:30. Просмотров 383. Ответов 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++
Вычисление формулы! Оформить в виде функции!! C++
Вычисление текстовой формулы C++
C++ Нужно оптимизировать
Оптимизировать перебор C++
Разработка программы для вычисления объема геометрических фигур; вычисление результата 'непростой' формулы C++
C++ Оптимизировать алгоритм
C++ Помогите найти ошибку в программе. Вычисление формулы.
Вычисление значения математической формулы введённой через консколь C++
Оптимизировать код C++
C++ Цикл: Вычисление значения согласно заданной формулы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Том Ардер
Модератор
 Аватар для Том Ардер
3665 / 2284 / 279
Регистрация: 15.06.2009
Сообщений: 4,005
11.02.2013, 17:43     Оптимизировать вычисление формулы #2
1) заменить возведение в степень (логарифм + экспонента) на квадратный корень (дважды);
2) вместо float использовать double (не будет преобразований типа).
И всё это лучше обсуждать в разделе по плюсам. Куда именно перенести?
Igor3D
852 / 438 / 38
Регистрация: 01.10.2012
Сообщений: 2,209
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!
 Аватар для gray_fox
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
12.02.2013, 14:15     Оптимизировать вычисление формулы #4
Цитата Сообщение от Igor3D Посмотреть сообщение
// используем предраcсчитанный массив с шагом напр 0.001
Массив то наверно получится здоровенный. Так то вроде такую табличку сделать не сложно: (int)(temp * 1000) + shift в качестве индекса и всё.
Igor3D
852 / 438 / 38
Регистрация: 01.10.2012
Сообщений: 2,209
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));
}
gray_fox
What a waste!
 Аватар для gray_fox
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
14.02.2013, 00:23     Оптимизировать вычисление формулы #6
Цитата Сообщение от Igor3D Посмотреть сообщение
А как расправиться с квадратом?
Незнаю. Можно попробовать вместо массива хэш-таблицу (с ключом pair(dot_product, length_squared), например) или двумерный массив, но вообще не факт, что так будет быстрее, чем каждый раз честно считать + объём памяти будет ещё больше.
Yandex
Объявления
14.02.2013, 00:23     Оптимизировать вычисление формулы
Ответ Создать тему
Опции темы

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