double answer = 0;
+double anglefactor = 1;
+
/* compare codes */
int codecmp (char *ref, char *str)
{ "|", Or, 2, 1, -2}
};
-#define NB_FUNCTIONS 52
+#define NB_FUNCTIONS 55
keyword_t functions[NB_FUNCTIONS] = {
{ "sqrt", Sqr, 1, 4, 5},
{ "pow", Pow, 2, 3, 5},
{ "sum", Sum, 0, 3, 5},
{ "var", Variance, 2, 3, 5},
{ "format", Precision, 1, 6, 9},
- { "base", Base, 2, 4, 9}
+ { "base", Base, 2, 4, 9},
+ { "deg", Deg, 0, 3, 9},
+ { "grad", Grad, 0, 4, 9},
+ { "rad", Rad, 0, 3, 9}
};
#define NB_CONSTANTS 3
case Variance: func = "Variance"; break;
case Precision: func = "Precision"; break;
case Base: func = "Base"; break;
+ case Deg: func = "Degree"; break;
+ case Grad: func = "Gradian"; break;
+ case Rad: func = "Radian"; break;
}
printf ("Function: %s\n", func);
printf ("stack func.:");
printf (" max mean med min ord prod sum var\n");
printf ("control management:");
- printf (" base format help quit\n");
+ printf (" base deg format grad help quit rad\n");
printf ("constants:");
printf (" ans e pi\n");
}
case Order:
case Prod:
case Sum:
+ case Deg:
+ case Grad:
+ case Rad:
break;
case While:
if (root->ops[0] == NULL) {
case Mod: return fmod (op0, op1);
case Pow: return pow (op0, op1);
case Sqr: return sqrt (op0);
- case Cos: return cos (op0);
- case Sin: return sin (op0);
- case Tan: return tan (op0);
- case Acos: return acos (op0);
- case Asin: return asin (op0);
- case Atan: return atan (op0);
+ case Cos: return cos (op0 / anglefactor);
+ case Sin: return sin (op0 / anglefactor);
+ case Tan: return tan (op0 / anglefactor);
+ case Acos: return acos (op0) * anglefactor;
+ case Asin: return asin (op0) * anglefactor;
+ case Atan: return atan (op0) * anglefactor;
case Ln: return log (op0);
case Log: return log10 (op0);
case Exp: return exp (op0);
case Base:
base ((int)op0, (int)op1);
break;
+ case Deg:
+ anglefactor = 180 / M_PI;
+ break;
+ case Grad:
+ anglefactor = 200 / M_PI;
+ break;
+ case Rad:
+ anglefactor = 1;
+ break;
}
return 0;