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

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

Войти
Регистрация
Восстановить пароль
 
Igor3D
964 / 497 / 50
Регистрация: 01.10.2012
Сообщений: 2,473
#1

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

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

Добрый день

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

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

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

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

Вычисление формулы! Оформить в виде функции!! - C++
С=n!/(m!*(n-m)!) Плисс помогите завтра нада показывать!!!! P.S поиск юзать не умею!! если такое есть дайте плисс ссылку!!!

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

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

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

Разработка программы для вычисления объема геометрических фигур; вычисление результата 'непростой' формулы - C++
Доброго вам времени суток, господа. Прошу помощи в написании пары легких программок на языке СИ. Задания таковы: Составить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Том Ардер
Модератор
Эксперт по математике/физике
3742 / 2355 / 293
Регистрация: 15.06.2009
Сообщений: 4,219
11.02.2013, 17:43 #2
1) заменить возведение в степень (логарифм + экспонента) на квадратный корень (дважды);
2) вместо float использовать double (не будет преобразований типа).
И всё это лучше обсуждать в разделе по плюсам. Куда именно перенести?
0
Igor3D
964 / 497 / 50
Регистрация: 01.10.2012
Сообщений: 2,473
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
?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
12.02.2013, 14:15 #4
Цитата Сообщение от Igor3D Посмотреть сообщение
// используем предраcсчитанный массив с шагом напр 0.001
Массив то наверно получится здоровенный. Так то вроде такую табличку сделать не сложно: (int)(temp * 1000) + shift в качестве индекса и всё.
0
Igor3D
964 / 497 / 50
Регистрация: 01.10.2012
Сообщений: 2,473
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));
}
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
14.02.2013, 00:23 #6
Цитата Сообщение от Igor3D Посмотреть сообщение
А как расправиться с квадратом?
Незнаю. Можно попробовать вместо массива хэш-таблицу (с ключом pair(dot_product, length_squared), например) или двумерный массив, но вообще не факт, что так будет быстрее, чем каждый раз честно считать + объём памяти будет ещё больше.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 00:23
Привет! Вот еще темы с ответами:

Вычисление непрерывных дробей и выражений. Вычисление полиномов и их производных. - C++
1. Чему равна знакочередующаяся сумма цифр числа n. 2. Даны натуральное число n и вещественное число х. Составить программу для...

Оптимизировать алгоритм - C++
Приятель подкинул задачку: Получить новую матрицу В, элемент b которой равен наименьшему из элементов a исходной матрицы, где k меняется...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.02.2013, 00:23
Ответ Создать тему
Опции темы

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