📄 tcomplex.bas
字号:
Call SinCos(tmph2y, s, c)
C_Power.Real = tmpf * c
C_Power.Imag = tmpf * s
End Function
'开方
Public Function C_Sqrt(Z1 As TComplex) As TComplex
Dim tmp1 As Double
Dim tmp2 As Double
Dim c As Double, s As Double
tmp1 = Sqr(Sqr((Z1.Real * Z1.Real) + (Z1.Imag * Z1.Imag)))
tmp2 = 0.5 * ArcTan2(Z1.Imag, Z1.Real)
Call SinCos(tmp2, s, c)
C_Sqrt.Real = tmp1 * c
C_Sqrt.Imag = tmp1 * s
End Function
Public Function C_Exp(Z1 As TComplex) As TComplex
Dim tmp As Double
Dim c As Double, s As Double
tmp = Exp(Z1.Real)
Call SinCos(Z1.Imag, s, c)
C_Exp.Real = tmp * c
C_Exp.Imag = tmp * s
End Function
Public Function C_Ln(Z1 As TComplex) As TComplex
C_Ln.Real = 0.5 * Log((Z1.Real * Z1.Real) + (Z1.Imag * Z1.Imag))
C_Ln.Imag = ArcTan2(Z1.Imag, Z1.Real)
End Function
Public Function C_Log2(Z1 As TComplex) As TComplex
Const Ln2P = 1.44269504088896 ' {1/Ln(2)}
C_Log2.Real = 0.5 * Ln2P * Log((Z1.Real * Z1.Real) + (Z1.Imag * Z1.Imag))
C_Log2.Imag = ArcTan2(Z1.Imag, Z1.Real)
End Function
Public Function C_Log10(Z1 As TComplex) As TComplex
Const Ln10P = 0.434294481903252 ' {1/Ln(10)}
C_Log10.Real = 0.5 * Ln10P * Log((Z1.Real * Z1.Real) + (Z1.Imag * Z1.Imag))
C_Log10.Imag = ArcTan2(Z1.Imag, Z1.Real)
End Function
Public Function C_Sin(Z1 As TComplex) As TComplex
Dim c As Double, s As Double
Dim ch As Double, sh As Double
Call SinCos(Z1.Real, s, c)
Call SinHCosH(Z1.Imag, sh, ch)
C_Sin.Real = s * ch
C_Sin.Imag = c * sh
End Function
Public Function C_Cos(Z1 As TComplex) As TComplex
Dim c As Double, s As Double
Dim ch As Double, sh As Double
Call SinCos(Z1.Real, s, c)
Call SinHCosH(Z1.Imag, sh, ch)
C_Cos.Real = c * ch
C_Cos.Imag = -s * sh
End Function
Public Function C_Tan(Z1 As TComplex) As TComplex
Dim tmp As Double
Dim c As Double, s As Double
Dim ch As Double, sh As Double
Call SinCos(Z1.Real * 2, s, c)
Call SinHCosH(Z1.Imag * 2, sh, ch)
tmp = 1 / (c + ch)
C_Tan.Real = s * tmp
C_Tan.Imag = sh * tmp
End Function
Public Function C_Cot(Z1 As TComplex) As TComplex
C_Cot = C_Rev(C_Tan(Z1))
End Function
Public Function C_Csc(Z1 As TComplex) As TComplex
C_Csc = C_Rev(C_Sin(Z1))
End Function
Public Function C_Sec(Z1 As TComplex) As TComplex
C_Sec = C_Rev(C_Cos(Z1))
End Function
Public Function C_SinH(Z1 As TComplex) As TComplex
Dim c As Double, s As Double
Dim ch As Double, sh As Double
Call SinCos(Z1.Imag, s, c)
Call SinHCosH(Z1.Real, sh, ch)
C_SinH.Real = sh * c
C_SinH.Imag = ch * s
End Function
Public Function C_CosH(Z1 As TComplex) As TComplex
Dim c As Double, s As Double
Dim ch As Double, sh As Double
Call SinCos(Z1.Imag, s, c)
Call SinHCosH(Z1.Real, sh, ch)
C_CosH.Real = ch * c
C_CosH.Imag = sh * s
End Function
Public Function C_TanH(Z1 As TComplex) As TComplex
Dim tmp As Double
Dim c As Double, s As Double
Dim ch As Double, sh As Double
Call SinCos(2 * Z1.Imag, s, c)
Call SinHCosH(2 * Z1.Real, sh, ch)
tmp = 1 / (ch + c)
C_TanH.Real = sh * tmp
C_TanH.Imag = s * tmp
End Function
Public Function C_CotH(Z1 As TComplex) As TComplex
C_CotH = C_Rev(C_TanH(Z1))
End Function
Public Function C_CscH(Z1 As TComplex) As TComplex
C_CscH = C_Rev(C_SinH(Z1))
End Function
Public Function C_SecH(Z1 As TComplex) As TComplex
C_SecH = C_Rev(C_CosH(Z1))
End Function
Public Function C_ArcSin(Z1 As TComplex) As TComplex
Dim tmp1 As Double
Dim tmp2 As Double
Dim tmpR As Double
Dim tmpA As Double
Dim c As Double, s As Double
tmp1 = ((Z1.Real * Z1.Real) - (Z1.Imag * Z1.Imag))
tmpA = -2 * Z1.Real * Z1.Imag
tmpR = 1 - tmp1
tmp1 = Sqr(Sqr((tmpR * tmpR) + (tmpA * tmpA)))
tmp2 = 0.5 * ArcTan2(tmpA, tmpR)
Call SinCos(tmp2, s, c)
tmpR = tmp1 * c - Z1.Imag
tmpA = tmp1 * s + Z1.Real
C_ArcSin.Imag = -0.5 * Log((tmpR * tmpR) + (tmpA * tmpA))
C_ArcSin.Real = ArcTan2(tmpA, tmpR)
End Function
Public Function C_ArcCos(Z1 As TComplex) As TComplex
Dim tmp1 As Double
Dim tmp2 As Double
Dim tmpR As Double
Dim tmpA As Double
Dim c As Double, s As Double
tmp1 = ((Z1.Real * Z1.Real) - (Z1.Imag * Z1.Imag))
tmpA = 2 * Z1.Real * Z1.Imag
tmpR = tmp1 - 1
tmp1 = Sqr(Sqr((tmpR * tmpR) + (tmpA * tmpA)))
tmp2 = 0.5 * ArcTan2(tmpA, tmpR)
Call SinCos(tmp2, s, c)
tmpR = tmp1 * c + Z1.Real
tmpA = tmp1 * s + Z1.Imag
C_ArcCos.Imag = -0.5 * Log((tmpR * tmpR) + (tmpA * tmpA))
C_ArcCos.Real = ArcTan2(tmpA, tmpR)
End Function
Public Function C_ArcTan(Z1 As TComplex) As TComplex
Dim tmp1 As Double
Dim tmp2 As Double
Dim tmpR As Double
Dim tmpA As Double
Dim tmpTR As Double
Dim tmpTA As Double
Dim tmpf As Double
tmp1 = 1 + Z1.Imag
tmp2 = -Z1.Real
tmpR = 1 - Z1.Imag
tmpA = Z1.Real
tmpf = 1 / ((tmpR * tmpR) + (tmpA * tmpA))
tmpTR = (tmp1 * tmpR + tmp2 * tmpA) * tmpf
tmpTA = (tmp2 * tmpR - tmp1 * tmpA) * tmpf
tmpR = 0.25 * Log((tmpTR * tmpTR) + (tmpTA * tmpTA))
tmpA = 0.5 * ArcTan2(tmpTA, tmpTR)
C_ArcTan.Real = -tmpA
C_ArcTan.Imag = tmpR
End Function
Public Function C_ArcCsc(Z1 As TComplex) As TComplex
C_ArcCsc = C_ArcSin(C_Rev(Z1))
End Function
Public Function C_ArcSec(Z1 As TComplex) As TComplex
C_ArcSec = C_ArcCos(C_Rev(Z1))
End Function
Public Function C_ArcCot(Z1 As TComplex) As TComplex
C_ArcCot = C_ArcTan(C_Rev(Z1))
End Function
Public Function C_ArcSinh(Z1 As TComplex) As TComplex
Dim tmp1 As Double
Dim tmp2 As Double
Dim tmpR As Double
Dim tmpA As Double
Dim c As Double, s As Double
tmp1 = (Z1.Real - Z1.Imag) * (Z1.Real + Z1.Imag)
tmpA = 2 * Z1.Real * Z1.Imag
tmpR = tmp1 + 1
tmp1 = Sqr(Sqr((tmpR * tmpR) + (tmpA * tmpA)))
tmp2 = 0.5 * ArcTan2(tmpA, tmpR)
Call SinCos(tmp2, s, c)
tmpR = tmp1 * c + Z1.Real
tmpA = tmp1 * s + Z1.Imag
C_ArcSinh.Real = 0.5 * Log((tmpR * tmpR) + (tmpA * tmpA))
C_ArcSinh.Imag = ArcTan2(tmpA, tmpR)
End Function
Public Function C_ArcCosh(Z1 As TComplex) As TComplex
Dim tmp1 As Double
Dim tmp2 As Double
Dim tmpR As Double
Dim tmpA As Double
Dim c As Double, s As Double
tmp1 = (Z1.Real - Z1.Imag) * (Z1.Real + Z1.Imag)
tmpA = 2 * Z1.Real * Z1.Imag
tmpR = tmp1 - 1
tmp1 = Sqr(Sqr((tmpR * tmpR) + (tmpA * tmpA)))
tmp2 = 0.5 * ArcTan2(tmpA, tmpR)
Call SinCos(tmp2, s, c)
tmpR = tmp1 * c + Z1.Real
tmpA = tmp1 * s + Z1.Imag
C_ArcCosh.Real = 0.5 * Log((tmpR * tmpR) + (tmpA * tmpA))
C_ArcCosh.Imag = ArcTan2(tmpA, tmpR)
End Function
Public Function C_ArcTanh(Z1 As TComplex) As TComplex
Dim tmp1 As Double
Dim tmp2 As Double
Dim tmpR As Double
Dim tmpA As Double
Dim tmpTR As Double
Dim tmpTA As Double
Dim tmpf As Double
tmp1 = 1 + Z1.Real
tmp2 = Z1.Imag
tmpR = 1 - Z1.Real
tmpA = -Z1.Imag
tmpf = 1 / ((tmpR * tmpR) + (tmpA * tmpA))
tmpTR = (tmp1 * tmpR + tmp2 * tmpA) * tmpf
tmpTA = (tmp2 * tmpR - tmp1 * tmpA) * tmpf
C_ArcTanh.Real = 0.25 * Log((tmpTR * tmpTR) + (tmpTA * tmpTA))
C_ArcTanh.Imag = 0.5 * ArcTan2(tmpTA, tmpTR)
End Function
Public Function C_ArcCsch(Z1 As TComplex) As TComplex
C_ArcCsch = C_ArcSinh(C_Rev(Z1))
End Function
Public Function C_ArcSech(Z1 As TComplex) As TComplex
C_ArcSech = C_ArcCosh(C_Rev(Z1))
End Function
Public Function C_ArcCoth(Z1 As TComplex) As TComplex
C_ArcCoth = C_ArcTanh(C_Rev(Z1))
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -