Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/2: Рейтинг темы: голосов - 2, средняя оценка - 4.50
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
1

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

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

Добрый день

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

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

Спасибо
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2013, 17:30
Ответы с готовыми решениями:

Вычисление формулы с условиями
Помогите пожалуйста с 10-м.

Вычисление физической формулы
Здравствуйте. Помогите пожалуйста разобраться, в чем ошибка? Выводит либо 0,либо неправильное...

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

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

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

5
Том Ардер
Модератор
Эксперт по математике/физике
3902 / 2506 / 336
Регистрация: 15.06.2009
Сообщений: 4,637
11.02.2013, 17:43 2
1) заменить возведение в степень (логарифм + экспонента) на квадратный корень (дважды);
2) вместо float использовать double (не будет преобразований типа).
И всё это лучше обсуждать в разделе по плюсам. Куда именно перенести?
0
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
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!
1561 / 1265 / 168
Регистрация: 21.04.2012
Сообщений: 2,649
Завершенные тесты: 3
12.02.2013, 14:15 4
Цитата Сообщение от Igor3D Посмотреть сообщение
// используем предраcсчитанный массив с шагом напр 0.001
Массив то наверно получится здоровенный. Так то вроде такую табличку сделать не сложно: (int)(temp * 1000) + shift в качестве индекса и всё.
0
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
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!
1561 / 1265 / 168
Регистрация: 21.04.2012
Сообщений: 2,649
Завершенные тесты: 3
14.02.2013, 00:23 6
Цитата Сообщение от Igor3D Посмотреть сообщение
А как расправиться с квадратом?
Незнаю. Можно попробовать вместо массива хэш-таблицу (с ключом pair(dot_product, length_squared), например) или двумерный массив, но вообще не факт, что так будет быстрее, чем каждый раз честно считать + объём памяти будет ещё больше.
0
14.02.2013, 00:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 00:23

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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