J'utilise la loi des cosinus dans un programme et il semble que ce soit un point lent de mon code. Voici la ligne de code que j'ai :
Ans = Math.Sqrt(A ^ 2 + B ^ 2 - 2 * A * B * Math.Cos(C - D))
Où A à D sont des variables doubles qui changent à chaque appel. Cette fonction semble prendre environ 2000 ticks pour s'exécuter. J'ai cherché à utiliser l'approximation du petit angle, c'est-à-dire que si (C-D) est suffisamment petit, vous pouvez utiliser cos(C-D) = 1 - ((C-D)^2)/2. Malheureusement, cela s'est avéré être plus lent que le code original. J'ai cherché toutes sortes de relations pouvant être utilisées pour simplifier le calcul, mais A et C sont liés d'une manière complexe et B et D sont liés de la même manière, il n'y a aucune relation entre A et B ou entre C et D.
J'ai pensé à utiliser une fonction de consultation pour toutes les valeurs de (C-D) mais ma précision est actuellement d'au moins 6 chiffres significatifs et je préférerais rester à ce niveau car c'est la précision de mes données d'entrée, en bref, cela signifie environ un million de vaules dans la consultation et ce n'est qu'une section de la fonction. J'ai pensé à avoir une consultation pour les quatre valeurs (A, B, C et D) mais je ne sais pas comment l'implémenter.
J'ai également déjà multithreadé cette application et tenté d'utiliser le GPGPU (le GPGPU s'est avéré plus lent en raison du temps passé à charger et décharger la mémoire du GPU).
Ma question est donc de savoir comment accélérer cette fonction.
Merci d'avance !