Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,896
Записей в блоге: 2

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

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

Студворк — интернет-сервис помощи студентам
Добрый день

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

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

Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2013, 17:30
Ответы с готовыми решениями:

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

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

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

5
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
11.02.2013, 17:43
1) заменить возведение в степень (логарифм + экспонента) на квадратный корень (дважды);
2) вместо float использовать double (не будет преобразований типа).
И всё это лучше обсуждать в разделе по плюсам. Куда именно перенести?
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,896
Записей в блоге: 2
12.02.2013, 11:56  [ТС]
Цитата Сообщение от Том Ардер Посмотреть сообщение
1) заменить возведение в степень (логарифм + экспонента) на квадратный корень (дважды);
2) вместо float использовать double (не будет преобразований типа).
И всё это лучше обсуждать в разделе по плюсам. Куда именно перенести?
Не очень понял причем тут плюсы для начинающих, ну да ладно, перенесли так перенесли.

Все равно многовато вызовов получается (3 корня, один в length). Как бы сделать табличку чтобы считать так
C++
1
2
double temp = dotProduct(vec1, vec2) / lengthSquared(vec1);
return Table(temp);  // используем предраcсчитанный массив с шагом напр 0.001
?
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
12.02.2013, 14:15
Цитата Сообщение от Igor3D Посмотреть сообщение
// используем предраcсчитанный массив с шагом напр 0.001
Массив то наверно получится здоровенный. Так то вроде такую табличку сделать не сложно: (int)(temp * 1000) + shift в качестве индекса и всё.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,896
Записей в блоге: 2
12.02.2013, 22:26  [ТС]
Цитата Сообщение от 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
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
14.02.2013, 00:23
Цитата Сообщение от Igor3D Посмотреть сообщение
А как расправиться с квадратом?
Незнаю. Можно попробовать вместо массива хэш-таблицу (с ключом pair(dot_product, length_squared), например) или двумерный массив, но вообще не факт, что так будет быстрее, чем каждый раз честно считать + объём памяти будет ещё больше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2013, 00:23
Помогаю со студенческими работами здесь

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

Вычисление площади кольца. Оптимизировать код
program plKOLC; uses crt; const pi=3.141592653; var R1,R2,S1,S2:real; Begin writeln('Вычисление площади кольца.'); ...

Вычисление формулы
Кто может помочь написать программу, которая вычислит это выражение 🙏 Заранее спасибо!

Вычисление формулы
Написать код для данной формулы: y=(x-w)/z+u*v. Ниже приведён код. Можете подсказать правильно написано или нет? .ModelSmall; .Stack...

Вычисление формулы
Делаю лабораторную, не могу понять, почему у меня во второй формуле всегда получается ноль? namespace ConsoleApplication1 { class...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru