📄 parser.c
字号:
#endif
void (*StkFlip)(void) = dStkFlip;
void dStkSin(void) {
double sinx, cosx, sinhy, coshy;
FPUsincos(&Arg1->d.x, &sinx, &cosx);
FPUsinhcosh(&Arg1->d.y, &sinhy, &coshy);
Arg1->d.x = sinx*coshy;
Arg1->d.y = cosx*sinhy;
}
#ifndef XFRACT
void mStkSin(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkSin();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkSin(void) {
long x, y, sinx, cosx, sinhy, coshy;
x = Arg1->l.x >> Delta16;
y = Arg1->l.y >> Delta16;
SinCos086(x, &sinx, &cosx);
SinhCosh086(y, &sinhy, &coshy);
Arg1->l.x = multiply(sinx, coshy, ShiftBack); /* TIW 06-18-90 */
Arg1->l.y = multiply(cosx, sinhy, ShiftBack); /* TIW 06-18-90 */
}
#endif
void (*StkSin)(void) = dStkSin;
/* The following functions are supported by both the parser and for fn
variable replacement. TIW 04-22-91 */
void dStkTan(void) {
double sinx, cosx, sinhy, coshy, denom;
Arg1->d.x *= 2;
Arg1->d.y *= 2;
FPUsincos(&Arg1->d.x, &sinx, &cosx);
FPUsinhcosh(&Arg1->d.y, &sinhy, &coshy);
denom = cosx + coshy;
if(fabs(denom) <= DBL_MIN) return;
Arg1->d.x = sinx/denom;
Arg1->d.y = sinhy/denom;
}
#ifndef XFRACT
void mStkTan(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkTan();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkTan(void) {
long x, y, sinx, cosx, sinhy, coshy, denom;
x = Arg1->l.x >> Delta16;
x = x << 1;
y = Arg1->l.y >> Delta16;
y = y << 1;
SinCos086(x, &sinx, &cosx);
SinhCosh086(y, &sinhy, &coshy);
denom = cosx + coshy;
if(denom == 0) return;
Arg1->l.x = divide(sinx,denom,bitshift);
Arg1->l.y = divide(sinhy,denom,bitshift);
}
#endif
void (*StkTan)(void) = dStkTan;
void dStkTanh(void) {
double siny, cosy, sinhx, coshx, denom;
Arg1->d.x *= 2;
Arg1->d.y *= 2;
FPUsincos(&Arg1->d.y, &siny, &cosy);
FPUsinhcosh(&Arg1->d.x, &sinhx, &coshx);
denom = coshx + cosy;
if(fabs(denom) <= DBL_MIN) return;
Arg1->d.x = sinhx/denom;
Arg1->d.y = siny/denom;
}
#ifndef XFRACT
void mStkTanh(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkTanh();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkTanh(void) {
long x, y, siny, cosy, sinhx, coshx, denom;
x = Arg1->l.x >> Delta16;
x = x << 1;
y = Arg1->l.y >> Delta16;
y = y << 1;
SinCos086(y, &siny, &cosy);
SinhCosh086(x, &sinhx, &coshx);
denom = coshx + cosy;
if(denom == 0) return;
Arg1->l.x = divide(sinhx,denom,bitshift);
Arg1->l.y = divide(siny,denom,bitshift);
}
#endif
void (*StkTanh)(void) = dStkTanh;
void dStkCoTan(void) {
double sinx, cosx, sinhy, coshy, denom;
Arg1->d.x *= 2;
Arg1->d.y *= 2;
FPUsincos(&Arg1->d.x, &sinx, &cosx);
FPUsinhcosh(&Arg1->d.y, &sinhy, &coshy);
denom = coshy - cosx;
if(fabs(denom) <= DBL_MIN) return;
Arg1->d.x = sinx/denom;
Arg1->d.y = -sinhy/denom;
}
#ifndef XFRACT
void mStkCoTan(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkCoTan();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkCoTan(void) {
long x, y, sinx, cosx, sinhy, coshy, denom;
x = Arg1->l.x >> Delta16;
x = x << 1;
y = Arg1->l.y >> Delta16;
y = y << 1;
SinCos086(x, &sinx, &cosx);
SinhCosh086(y, &sinhy, &coshy);
denom = coshy - cosx;
if(denom == 0) return;
Arg1->l.x = divide(sinx,denom,bitshift);
Arg1->l.y = -divide(sinhy,denom,bitshift);
}
#endif
void (*StkCoTan)(void) = dStkCoTan;
void dStkCoTanh(void) {
double siny, cosy, sinhx, coshx, denom;
Arg1->d.x *= 2;
Arg1->d.y *= 2;
FPUsincos(&Arg1->d.y, &siny, &cosy);
FPUsinhcosh(&Arg1->d.x, &sinhx, &coshx);
denom = coshx - cosy;
if(fabs(denom) <= DBL_MIN) return;
Arg1->d.x = sinhx/denom;
Arg1->d.y = -siny/denom;
}
#ifndef XFRACT
void mStkCoTanh(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkCoTanh();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkCoTanh(void) {
long x, y, siny, cosy, sinhx, coshx, denom;
x = Arg1->l.x >> Delta16;
x = x << 1;
y = Arg1->l.y >> Delta16;
y = y << 1;
SinCos086(y, &siny, &cosy);
SinhCosh086(x, &sinhx, &coshx);
denom = coshx - cosy;
if(denom == 0) return;
Arg1->l.x = divide(sinhx,denom,bitshift);
Arg1->l.y = -divide(siny,denom,bitshift);
}
#endif
void (*StkCoTanh)(void) = dStkCoTanh;
/* The following functions are not directly used by the parser - support
for the parser was not provided because the existing parser language
represents these quite easily. They are used for fn variable support
in miscres.c but are placed here because they follow the pattern of
the other parser functions. TIW 04-22-91 */
void dStkRecip(void) {
double mod;
mod =Arg1->d.x * Arg1->d.x + Arg1->d.y * Arg1->d.y;
if(mod <= DBL_MIN) return;
Arg1->d.x = Arg1->d.x/mod;
Arg1->d.y = -Arg1->d.y/mod;
}
#ifndef XFRACT
void mStkRecip(void) {
struct MP mod;
mod = *MPadd(*MPmul(Arg1->m.x, Arg1->m.x),*MPmul(Arg1->m.y, Arg1->m.y));
if(mod.Mant <= 0L) return;
Arg1->m.x = *MPdiv(Arg1->m.x,mod);
Arg1->m.y = *MPdiv(Arg1->m.y,mod);
Arg1->m.y.Exp ^= 0x8000;
}
void lStkRecip(void) {
long mod;
mod = multiply(Arg1->l.x,Arg1->l.x,bitshift)
+ multiply(Arg1->l.y,Arg1->l.y,bitshift);
if(mod<=0L) return;
Arg1->l.x = divide(Arg1->l.x,mod,bitshift);
Arg1->l.y = -divide(Arg1->l.y,mod,bitshift);
}
#endif
void StkIdent(void) { /* do nothing - the function Z */
}
/* End TIW 04-22-91 */
void dStkSinh(void) {
double siny, cosy, sinhx, coshx;
FPUsincos(&Arg1->d.y, &siny, &cosy);
FPUsinhcosh(&Arg1->d.x, &sinhx, &coshx);
Arg1->d.x = sinhx*cosy;
Arg1->d.y = coshx*siny;
}
#ifndef XFRACT
void mStkSinh(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkSinh();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkSinh(void) {
long x, y, sinhx, coshx, siny, cosy;
x = Arg1->l.x >> Delta16;
y = Arg1->l.y >> Delta16;
SinCos086(y, &siny, &cosy);
SinhCosh086(x, &sinhx, &coshx);
Arg1->l.x = multiply(cosy, sinhx, ShiftBack); /* TIW 06-18-90 */
Arg1->l.y = multiply(siny, coshx, ShiftBack); /* TIW 06-18-90 */
}
#endif
void (*StkSinh)(void) = dStkSinh;
void dStkCos(void) {
double sinx, cosx, sinhy, coshy;
FPUsincos(&Arg1->d.x, &sinx, &cosx);
FPUsinhcosh(&Arg1->d.y, &sinhy, &coshy);
Arg1->d.x = cosx*coshy;
Arg1->d.y = -sinx*sinhy; /* TIW 04-25-91 sign */
}
#ifndef XFRACT
void mStkCos(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkCos();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkCos(void) {
long x, y, sinx, cosx, sinhy, coshy;
x = Arg1->l.x >> Delta16;
y = Arg1->l.y >> Delta16;
SinCos086(x, &sinx, &cosx);
SinhCosh086(y, &sinhy, &coshy);
Arg1->l.x = multiply(cosx, coshy, ShiftBack); /* TIW 06-18-90 */
Arg1->l.y = -multiply(sinx, sinhy, ShiftBack); /* TIW 04-25-91 sign */
}
#endif
void (*StkCos)(void) = dStkCos;
/* Bogus version of cos, to replicate bug which was in regular cos till v16: */
void dStkCosXX(void) {
dStkCos();
Arg1->d.y = -Arg1->d.y;
}
#ifndef XFRACT
void mStkCosXX(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkCosXX();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkCosXX(void) {
lStkCos();
Arg1->l.y = -Arg1->l.y;
}
#endif
void (*StkCosXX)(void) = dStkCosXX;
void dStkCosh(void) {
double siny, cosy, sinhx, coshx;
FPUsincos(&Arg1->d.y, &siny, &cosy);
FPUsinhcosh(&Arg1->d.x, &sinhx, &coshx);
Arg1->d.x = coshx*cosy;
Arg1->d.y = sinhx*siny;
}
#ifndef XFRACT
void mStkCosh(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkCosh();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkCosh(void) {
long x, y, sinhx, coshx, siny, cosy;
x = Arg1->l.x >> Delta16;
y = Arg1->l.y >> Delta16;
SinCos086(y, &siny, &cosy);
SinhCosh086(x, &sinhx, &coshx);
Arg1->l.x = multiply(cosy, coshx, ShiftBack); /* TIW 06-18-90 */
Arg1->l.y = multiply(siny, sinhx, ShiftBack); /* TIW 06-18-90 */
}
#endif
void (*StkCosh)(void) = dStkCosh;
void dStkLT(void) {
Arg2->d.x = (double)(Arg2->d.x < Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkLT(void) {
Arg2->m.x = *fg2MP((long)(MPcmp(Arg2->m.x, Arg1->m.x) == -1), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkLT(void) {
Arg2->l.x = Arg2->l.x < Arg1->l.x;
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkLT)(void) = dStkLT;
void dStkGT(void) {
Arg2->d.x = (double)(Arg2->d.x > Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkGT(void) {
Arg2->m.x = *fg2MP((long)(MPcmp(Arg2->m.x, Arg1->m.x) == 1), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkGT(void) {
Arg2->l.x = Arg2->l.x > Arg1->l.x;
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkGT)(void) = dStkGT;
void dStkLTE(void) {
Arg2->d.x = (double)(Arg2->d.x <= Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkLTE(void) {
int comp;
comp = MPcmp(Arg2->m.x, Arg1->m.x);
Arg2->m.x = *fg2MP((long)(comp == -1 || comp == 0), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkLTE(void) {
Arg2->l.x = Arg2->l.x <= Arg1->l.x;
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkLTE)(void) = dStkLTE;
void dStkGTE(void) {
Arg2->d.x = (double)(Arg2->d.x >= Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkGTE(void) {
int comp;
comp = MPcmp(Arg2->m.x, Arg1->m.x);
Arg2->m.x = *fg2MP((long)(comp == 1 || comp == 0), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkGTE(void) {
Arg2->l.x = Arg2->l.x >= Arg1->l.x;
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkGTE)(void) = dStkGTE;
void dStkEQ(void) {
Arg2->d.x = (double)(Arg2->d.x == Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkEQ(void) {
int comp;
comp = MPcmp(Arg2->m.x, Arg1->m.x);
Arg2->m.x = *fg2MP((long)(comp == 0), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkEQ(void) {
Arg2->l.x = Arg2->l.x == Arg1->l.x;
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkEQ)(void) = dStkEQ;
void dStkNE(void) {
Arg2->d.x = (double)(Arg2->d.x != Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkNE(void) {
int comp;
comp = MPcmp(Arg2->m.x, Arg1->m.x);
Arg2->m.x = *fg2MP((long)(comp != 0), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkNE(void) {
Arg2->l.x = Arg2->l.x != Arg1->l.x;
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkNE)(void) = dStkNE;
void dStkOR(void) {
Arg2->d.x = (double)(Arg2->d.x || Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkOR(void) {
Arg2->m.x = *fg2MP((long)(Arg2->m.x.Mant || Arg1->m.x.Mant), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkOR(void) {
Arg2->l.x = Arg2->l.x || Arg1->l.x;
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkOR)(void) = dStkOR;
void dStkAND(void) {
Arg2->d.x = (double)(Arg2->d.x && Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkAND(void) {
Arg2->m.x = *fg2MP((long)(Arg2->m.x.Mant && Arg1->m.x.Mant), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkAND(void) {
Arg2->l.x = Arg2->l.x && Arg1->l.x;
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkAND)(void) = dStkAND;
void dStkLog(void) {
FPUcplxlog(&Arg1->d, &Arg1->d);
}
#ifndef XFRACT
void mStkLog(void) {
Arg1->d = MPC2cmplx(Arg1->m);
dStkLog();
Arg1->m = cmplx2MPC(Arg1->d);
}
void lStkLog(void) {
_CMPLX x;
x.x = (double)Arg1->l.x / fg;
x.y = (double)Arg1->l.y / fg;
FPUcplxlog(&x, &x);
if(fabs(x.x) < fgLimit && fabs(x.y) < fgLimit) {
Arg1->l.x = (long)(x.x * fg);
Arg1->l.y = (long)(x.y * fg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -