Le moyen le plus rapide pour calculer la distance entre deux CGPoints?
Distance entre deux points:
sqrt((x1-x2)^2 + (y1-y2)^2)
Est-il un moyen de ce faire des maths plus rapide en objective-C ?
EDIT: je pense que j'ai besoin de clarifier ci-dessus. J'ai écrit la formule ci-dessus juste pour clarifier ce que formule que je l'aide pour calculer la distance. ^ n'est pas censé représenter xor - j'ai juste voulu représenter la formule mathématique sans utiliser de fonctions comme pow ou quoi que ce soit, j'ai donc voulu utiliser ^ à "élever à la puissance off". Je me demandais si quelqu'un sait si à l'aide d'opérateurs au niveau du bit, ou autrement l'écriture de code en assemblée donnera une version optimisée. Je suis l'aide de la formule dans une application iPhone /iPad.
source d'informationauteur xcoder
Vous devez vous connecter pour publier un commentaire.
Pas, si vous avez besoin de la distance exacte vous ne pouvez pas battre cette formule.
Mais pour être clair ^ n'est pas un opérateur pour ajuster une valeur, mais un peu de l'opérateur qui ne xor.
vous aurez besoin de quelque chose comme
Si vous pouvez vivre avec juste la place (ce qui est utile lorsque vous voulez faire quelque chose comme trier par distance, vous pouvez utiliser le beaucoup plus efficace
Ces sera au moins aussi bonne que la solution pow. Au pire, pow() utilisera la pile et d'être moins efficace, mais peut-être que votre compilateur transforme en x*x pour ce cas.
Simplement offrir cela comme un simple, agréable à la recherche de la solution. Il n'est probablement pas plus vite que précédemment donné, juste plus court. Personnellement, je suis en utilisant
hypot
.Par la docscela vous permettra de revenir "à La racine carrée de (x^2+y^2)."
Sur un Mac Intel Clang compiler:
dans un grand total de 6 instructions pour les maths: sub, mul, sub, mul, ajouter, sqrt; assez dur à battre. (sqrt est une seule instruction, mais il faut plusieurs cycles).
considérant
x1, x2, y1, y2
sontfloat
oudouble
ou entier.La seule chose qui peut être amélioré ici est la racine carrée de la fonction de calcul.
J'ai essayé ces deux fonctions (trouvé dans un Article de Wikipedia sur la racine carrée de calcul) pour le calcul approximatif de la racine carrée des valeurs:
Mais sur mon Core 2 Duo PROCESSEUR Pentium ils ne semblent pas être plus rapide que la FPU x87
FSQRT
instruction. Voir si ils fonctionnent plus rapidement que la normesqrtf()/sqrt()
sur votre plate-forme et si la précision est suffisante.