gebrauchen kann, obwohl es jeder wohl auch selbst hinbekommen würde.

Das Makro ersetzt die rechenintensive Funktion ACos() durch ein Array mit
vorberechneten Werten mit wählbarer Genauigkeit per Konstante.
Laut meinem Speedtest benötigt die Variante bei 20.000.000 Durchläufen
nur runder 38% der Zeit, die die Original-Funktion benötigt. Sicherlich ist
das von Rechner zu Rechner auch wieder unterschiedlich.
Der Speicherverbrauch des Arrays ist auch enorm, solange man Doubles
einsetzt, aber wird bei grafischen Sachen wohl kaum eine Rolle spielen.
Code: Alles auswählen
;Schnellerer ACos() über Array und Macros gelöst
#RT_Cos2ACos = 20000 ;Genauigkeit (Speicherverbrauch: 20001 * SizeOf(Double) = 160.008 Bytes)
#RT_Cos2ACos2 = #RT_Cos2ACos / 2
Global Dim Cos2ACos.d(#RT_Cos2ACos)
For _ = 0 To #RT_Cos2ACos : Cos2ACos(_) = ACos((_ - #RT_Cos2ACos2) * 1.0 / #RT_Cos2ACos2) :Next
Macro RT_ACos(v)
Cos2ACos(Int(v * #RT_Cos2ACos2) + #RT_Cos2ACos2)
EndMacro
Hier noch die Version für alle, die die Winkel lieber in DEG haben:
Code: Alles auswählen
;Schnellerer ACos() über Array und Macros gelöst
#RT_Cos2ACos = 20000 ;Genauigkeit (Speicherverbrauch: 20001 * SizeOf(Double) = 160.008 Bytes)
#RT_Cos2ACos2 = #RT_Cos2ACos / 2
Global Dim Cos2ACos.d(#RT_Cos2ACos)
For _ = 0 To #RT_Cos2ACos : Cos2ACos(_) = ACos((_ - #RT_Cos2ACos2) * 1.0 / #RT_Cos2ACos2) * 57.295779513082323 : Next
Macro RT_ACos(v)
Cos2ACos(Int(v * #RT_Cos2ACos2) + #RT_Cos2ACos2)
EndMacro
Debug ACos(0.123456678) * 57.295779513082323
Debug RT_ACos(0.123456678)