Я использую закон косинусов в программе, и это кажется медленной точкой моего кода. Это строка кода, которая у меня есть:Оптимизация права косинусов в VB.net
Ans = Math.Sqrt(A^2 + B^2 - 2 * A * B * Math.Cos(C - D))
Где А-D - это двойные переменные, которые меняются каждый раз при вызове. Кажется, что для этой функции требуется около 2000 тиков. Я рассмотрел использование малой угловой аппроксимации, где if (C-D) достаточно мал, вы можете использовать cos (C-D) = 1 - ((C-D)^2)/2. К сожалению, это оказалось более медленным, чем исходный код. Я рассмотрел любые отношения, которые могут быть использованы для упрощения расчета, но A и C связаны сложным образом, и B и D связаны одинаково, нет никакой связи между A и B или между C и D .
Я думал об использовании функции поиска для всех значений (CD), но моя точность в настоящее время составляет по крайней мере 6 значительных цифр, и я предпочел бы оставаться на этом уровне, поскольку это точность моих входных данных , короче говоря, это означает около миллиона ваулей в поиске, и это всего лишь 1 часть функции. Я думал о поиске всех четырех значений (A, B, C и D), но я не уверен, как это реализовать.
Я также многопользовал это приложение и попытался использовать GPGPU (GPGPU оказался медленнее из-за времени, затрачиваемого на загрузку и выключение памяти GPU).
Итак, мой вопрос заключается в том, как ускорить эту функцию.
Спасибо, продвинутый!
что тип переменной? Вы увидите замедление, если используете decmal. –