📄 tcomplex.cpp
字号:
//复数对数
void TComplex::Ln () //Z=Ln(Z1)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fld st(1)
fld st(1)
fpatan
fxch st(2)
fmul st,st(1)
fxch st(1)
fmul st,st(1)
faddp st(1),st
fldln2
fxch st(1)
fyl2x
Fld _tempHalf
fmulp st(1),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::Log2 () //Z=Log2(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fld st(1)
fld st(1)
fpatan
fxch st(2)
fmul st,st(1)
fxch st(1)
fmul st,st(1)
faddp st(1),st
fld1
fxch st(1)
fyl2x
Fld _tempHalf
fmulp st(1),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::Log10 () //Z=Log10(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fld st(1)
fld st(1)
fpatan
fxch st(2)
fmul st,st(1)
fxch st(1)
fmul st,st(1)
faddp st(1),st
fldlg2
fxch st(1)
fyl2x
Fld _tempHalf
fmulp st(1),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
//复数三角函数
void TComplex::Sin () //Z=Sin(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
FSinCos
Fxch st(2)
FLDL2E
FMULp st(1),st
FLD ST(0)
FRNDINT
FSUB ST(1), ST
FXCH ST(1)
F2XM1
FLD1
FADDp st(1),st
FSCALE
FSTP ST(1)
fld1
fdiv st,st(1)
fld _tempHalf
fmul st(2),st
fmulp st(1),st
fld st(1)
fadd st,st(1)
fmulp st(3),st
fsubp st(1),st
fmulp st(2),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::Cos () //Z=Cos(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fchs
fsincos
fxch st(1)
Fxch st(2)
FLDL2E
FMULp st(1),st
FLD ST(0)
FRNDINT
FSUB ST(1), ST
FXCH ST(1)
F2XM1
FLD1
FADDp st(1),st
FSCALE
FSTP ST(1)
fld1
fdiv st,st(1)
fld _tempHalf
fmul st(2),st
fmulp st(1),st
fld st(1)
fadd st,st(1)
fmulp st(3),st
fsubp st(1),st
fmulp st(2),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::Tan () //Z=Tan(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fadd st,st(0)
fsincos
fxch st(2)
fadd st,st(0)
FLDL2E
FMULp st(1),st
FLD ST(0)
FRNDINT
FSUB ST(1), ST
FXCH ST(1)
F2XM1
FLD1
FADDp st(1),st
FSCALE
FSTP ST(1)
fld1
fdiv st,st(1)
fld _tempHalf
fmul st(2),st
fmulp st(1),st
fld st(0)
fsubr st,st(2)
fxch st(4)
faddp st(1),st
faddp st(1),st
fld1
fdivrp st(1),st
fmul st(2),st
fmulp st(1),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::Cot () //Z=Cot(Z1) => 1/tan(Z)
{
this->Tan();
this->Rev();
}
void TComplex::Csc () //Z=Csc(Z1) => 1/sin(Z)
{
this->Sin();
this->Rev();
}
void TComplex::Sec () //Z=Sec(Z1) => 1/Cos(Z)
{
this->Cos();
this->Rev();
}
void TComplex::ArcSin () //Z=ArcSin(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fld st(0)
fmul st,st(2)
fadd st,st(0)
fchs
fld st(1)
fsub st,st(3)
fld st(2)
fadd st,st(4)
fmulp st(1),st
fld1
fsubrp st(1),st
fld st(1)
fld st(1)
fpatan
fld _tempHalf
fmulp st(1),st
fsincos
fxch st(2)
fmul st,st(0)
fld st(3)
fmul st,st(0)
faddp st(1),st
fsqrt
fsqrt
fmul st(2),st
fmulp st(1),st
fstp st(2)
fsubrp st(3),st
faddp st(1),st
fld st(0)
fld st(2)
fpatan
fxch st(2)
fmul st,st(0)
fxch st(1)
fmul st,st(0)
faddp st(1),st
fldln2
fxch st(1)
fyl2x
fld _tempHalf
fchs
fmulp st(1),st
fxch st(1)
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::ArcCos () //Z=ArcCos(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fld st(0)
fmul st,st(2)
fadd st,st(0)
//--
fld st(1)
fsub st,st(3)
fld st(2)
fadd st,st(4)
fmulp st(1),st
fld1
fsubp st(1),st //<->
fld st(1)
fld st(1)
fpatan
fld _tempHalf
fmulp st(1),st
fsincos
fxch st(2)
fmul st,st(0)
fld st(3)
fmul st,st(0)
faddp st(1),st
fsqrt
fsqrt
fmul st(2),st
fmulp st(1),st
fstp st(2)
faddp st(2),st //<->
faddp st(2),st //<->
fxch st(1) //++
fld st(0)
fld st(2)
fpatan
fxch st(2)
fmul st,st(0)
fxch st(1)
fmul st,st(0)
faddp st(1),st
fldln2
fxch st(1)
fyl2x
fld _tempHalf
fchs
fmulp st(1),st
fxch st(1)
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::ArcTan () //Z=ArcTan(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fld st(0)
fmul st,st(0)
fld st(2)
fmul st,st(0)
faddp st(1),st
fxch st(2)
fadd st,st(0)
fsub st,st(2)
fld1
fsub st(3),st
fsub st(1),st
fdivrp st(1),st
fmul st(2),st
fmulp st(1),st
fadd st,st(0)
fld st(1)
fmul st,st(0)
fld st(1)
fmul st,st(0)
faddp st(1),st
fldln2
fxch st(1)
fyl2x
fld _tempHalfHalf
fmulp st(1),st
fxch st(2)
fpatan
fld _tempHalf
fchs
fmulp st(1),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::ArcCsc () //Z=ArcCsc(Z)
{
this->Rev();
this->ArcSin();
}
void TComplex::ArcSec () //Z=ArcSec(Z)
{
this->Rev();
this->ArcCos();
}
void TComplex::ArcCot () //Z=ArcCot(Z)
{
this->Rev();
this->ArcTan();
}
void TComplex::SinH () //Z=SinH(Z)
{
Extended zsh,zch,zs,zc;
this->_Re.SinHCosH(&zsh,&zch);
this->_Im.SinCos(&zs,&zc);
this->_Re=zsh; this->_Re.Mul(zc);
this->_Im=zch; this->_Im.Mul(zs);
}
void TComplex::CosH () //Z=CosH(Z)
{
Extended zsh,zch,zs,zc;
this->_Re.SinHCosH(&zsh,&zch);
this->_Im.SinCos(&zs,&zc);
this->_Re=zch; this->_Re.Mul(zc);
this->_Im=zsh; this->_Im.Mul(zs);
}
void TComplex::TanH () //Z=TanH(Z)
{
Extended zsh,zch,zs,zc;
this->_Re.Mul(2);
this->_Im.Mul(2);
this->_Re.SinHCosH(&zsh,&zch);
this->_Im.SinCos(&zs,&zc);
zch.Add(zc);
zch.Rev();
this->_Re=zsh; this->_Re.Mul(zch);
this->_Im=zs; this->_Im.Mul(zch);
}
void TComplex::CotH () //Z=CotH(Z)
{
this->TanH();
this->Rev();
}
void TComplex::CscH () //Z=CscH(Z) => 1/sinH(Z)
{
this->SinH();
this->Rev();
}
void TComplex::SecH () //Z=SecH(Z) => 1/CosH(Z)
{
this->CosH();
this->Rev();
}
void TComplex::ArcSinH () //Z=ArcSinH(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fld st(0)
fmul st,st(2)
fadd st,st(0)
fld st(1)
fsub st,st(3)
fld st(2)
fadd st,st(4)
fmulp st(1),st
fld1
faddp st(1),st //
fld st(1)
fld st(1)
fpatan
fld _tempHalf
fmulp st(1),st
fsincos
fxch st(2)
fmul st,st(0)
fld st(3)
fmul st,st(0)
faddp st(1),st
fsqrt
fsqrt
fmul st(2),st
fmulp st(1),st
fstp st(2)
faddp st(2),st
faddp st(2),st
fxch st(1)
fld st(0)
fld st(2)
fpatan
fxch st(2)
fmul st,st(0)
fxch st(1)
fmul st,st(0)
faddp st(1),st
fldln2
fxch st(1)
fyl2x
fld _tempHalf
fmulp st(1),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::ArcCosH () //Z=ArcCosH(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fld st(0)
fmul st,st(2)
fadd st,st(0)
fld st(1)
fsub st,st(3)
fld st(2)
fadd st,st(4)
fmulp st(1),st
fld1
fsubp st(1),st //与ArcSinH只有这里不同
fld st(1)
fld st(1)
fpatan
fld _tempHalf
fmulp st(1),st
fsincos
fxch st(2)
fmul st,st(0)
fld st(3)
fmul st,st(0)
faddp st(1),st
fsqrt
fsqrt
fmul st(2),st
fmulp st(1),st
fstp st(2)
faddp st(2),st
faddp st(2),st
fxch st(1)
fld st(0)
fld st(2)
fpatan
fxch st(2)
fmul st,st(0)
fxch st(1)
fmul st,st(0)
faddp st(1),st
fldln2
fxch st(1)
fyl2x
fld _tempHalf
fmulp st(1),st
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::ArcTanH () //Z=ArcTanH(Z)
{
__asm
{
fld _ExFloatPtr [_reg_this+_ExFloatByte]
fld _ExFloatPtr [_reg_this]
fxch st(1)
fchs
fld st(0)
fmul st,st(0)
fld st(2)
fmul st,st(0)
faddp st(1),st
fxch st(2)
fadd st,st(0)
fsub st,st(2)
fld1
fsub st(3),st
fsub st(1),st
fdivrp st(1),st
fmul st(2),st
fmulp st(1),st
fadd st,st(0)
fld st(1)
fmul st,st(0)
fld st(1)
fmul st,st(0)
faddp st(1),st
fldln2
fxch st(1)
fyl2x
fld _tempHalfHalf
fmulp st(1),st
fxch st(2)
fpatan
fld _tempHalf
fmulp st(1),st
fxch st(1)
fstp _ExFloatPtr [_reg_this]
fstp _ExFloatPtr [_reg_this+_ExFloatByte]
}
}
void TComplex::ArcCscH () //Z=ArcCscH(Z)
{
this->Rev();
this->ArcSinH();
}
void TComplex::ArcSecH () //Z=ArcSecH(Z)
{
this->Rev();
this->ArcCosH();
}
void TComplex::ArcCotH () //Z=ArcCotH(Z)
{
this->Rev();
this->ArcTanH();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -