O como complicarse la vida inútilmente, con lo sencillo que resulta.
Necesito obtener el arco coseno de un valor para procesarlo en VBasic para excel. VBasic no tiene una que lo permita, tampoco tiene la función arco seno, solo tiene arco tangente.
Tiro de mi casi del todo olvidada base matemática y decido generar una función arco coseno (MiACos(R)) en base al desarrollo en serie de dicha función. Encuentro en internet dos desarrollos, uno de los cuales directamente no entiendo, y con el otro empiezo el desarrollo (no pongo la fórmula de la serie.) Funcionar, funciona, pero solo para ángulos con un valor superior a 15 grados. Para valores inferiores, si intento apurar el número de términos sumados se produce un desbordamiento y no puedo aumentar la resolución.
Estuve dos días dedicado a simplificar las respectivas multiplicaciones y llego a la siguiente función:
Function MiACos4(R)
Dim Pi, DosNMas1, FactN, Fact2N, X, M, CuatroN
Pi = 3.141592654
M = Pi / 2
For N = 0 To 2506
DosNMas1 = 2 * N + 1
F = 1 / (DosNMas1)
For I = 1 To N
X = (N + I) / I
F = F * X / 4
Next
M = M - F * (R ^ DosNMas1) '
Next
MiACos4 = M
End Function
No la explico, funciona entre 5 y 90 º, pero la desecho. No lleva a ningún sitio.
Pienso y me digo, VBasic tiene la función Atn(r), arco tangente en radianes. Y si conozco el coseno, conozco el seno (sen^2+cos^2=1) y si conozco seno y coseno conozco la tangente. A partir de este supuesto creo la siguiente función, sin complicarme la vida:
Function MiACos5(R)
Dim S, C, T
C = R
S = Sqr((1 - R ^ 2))
T = S / C
MiACos5 = Atn(T)
End Function
Como podéis ver no he contemplado la posible división por cero, lo dejo en manos de quien quiera utilizarla.