Abt. Winkelfunktionen
==============
Man sollte es nicht für möglich halten, aber es gibt Programmiersprachen, die keine Arcustangens-Funktion aufweisen - etwa einfache Scriptsprachen für bestimmte Chats. XProfan dagegen kennt diese Funktion natürlich nativ, es verwendet dazu (als Mitgift von Delphi) den Assemblerbefehl FPATAN der FPU, welche selbst wiederum den bekannten CORDIC Algorithmus verwendet, dessen Implementierung - na sagen wir mal, "gehobenere Kenntnisse" erfordert. Der @ArcTan() ist dann z.B. auch nötig, um via math.inc die Funktionen für arcsin() und arccos() definieren zu können.
Gehen die Genauigkeitsanforderungen nicht über etwa 17.66 Bogensekunden hinaus (0,00489 rad ~ 1/200stel Winkelgrad), so kann bei Vorhandensein von Floatingpoint-Arithmetik der ArcusTangens auch durch folgende Näherungsformel ermittelt werden:
def !pih 1.5707963267948966192
...
return (abs(x!)<=1)*(x!/(1+0.28*x!*x!))+(x!>1)*(!pih-x!/(x!*x!+0.28))+(x!<-1)*(-!pih-x!/(x!*x!+0.28))
P.S.: Die Formel verwendet x! im Bogenmaß [rad] sowie sog. Wahrheitswerte, z.B. (x!>1)*..., wobei vorausgesetzt wird, daß diese sich zu true=+1 und false = 0 entwickeln. Auf Systemen mit true = -1 muss man daher die entsprechenden Vorzeichen umkehren. Eine fühlbare Beschleunigung ergäbe sich bei Vorab-Aufspaltung in entsprechende Ablaufzweige, so sieht das Ding allerdings viel eleganter aus. Eine Kanone würde auf 20 km Schussweiter mit dieser Formel allein schlimmstenfalls knapp 100 m danebenliegen. Dann gibts aber noch Luftwiderstand, Seitenwind und Corioliskraft sowie Hagel, Schnee und Vogelschwärme...