' arc sine ' error if value is outside the range [-1,1] Function ASin(value As Double) As Double If Abs(value) <> 1 Then ASin = Atn(value / Sqr(1 - value * value)) Else ASin = 1.5707963267949 * Sgn(value) End If End Function ' arc cosine ' error if NUMBER is outside the range [-1,1] Function ACos(ByVal number As Double) As Double If Abs(number) <> 1 Then ACos = 1.5707963267949 - Atn(number / Sqr(1 - number * number)) ElseIf number = -1 Then ACos = 3.14159265358979 End If 'elseif number=1 --> Acos=0 (implicit) End Function ' arc cotangent ' error if NUMBER is zero Function ACot(value As Double) As Double ACot = Atn(1 / value) End Function ' arc secant ' error if value is inside the range [-1,1] Function ASec(value As Double) As Double ' NOTE: the following lines can be replaced by a single call ' ASec = ACos(1 / value) If Abs(value) <> 1 Then ASec = 1.5707963267949 - Atn((1 / value) / Sqr(1 - 1 / (value * value))) Else ASec = 3.14159265358979 * Sgn(value) End If End Function ' arc cosecant ' error if value is inside the range [-1,1] Function ACsc(value As Double) As Double ' NOTE: the following lines can be replaced by a single call ' ACsc = ASin(1 / value) If Abs(value) <> 1 Then ACsc = Atn((1 / value) / Sqr(1 - 1 / (value * value))) Else ACsc = 1.5707963267949 * Sgn(value) End If End Function Francesco Balena