// test: echo -e 'base (-2)\nbase (16, 0)' | calc.exe | grep -c error | xargs test 2 =
// test: echo -e 'base (10, 16)\n255' | calc.exe | grep -q '=> ff'
// test: echo -e 'base' | calc.exe | grep -q 'base (I/O): 10/10'
+// test: echo -e 'deg\nacos (-1)\ngrad\nacos (-1)\nrad\nacos (-1)' | calc.exe | awk 'BEGIN { split("180 200 3.14159", v) } /=>/ { for (i in v) if ($2 == v[i]) n++ } END { exit n != 3 }'
+// test: echo -e 'format\nbase\ndeg\ngrad\nrad\nquit' | calc.exe -v 3 | grep -q bye
// Gauss sequence
// test: echo -e '{sto (1, 0), sto (10, 0), while (inc (10) <= 100, {sto (1, rcl (1) + rcl (10)), print (rcl (1))})};' | calc.exe | grep -q '=> 5050'
Prog, Arg, Call, List, Edit, Del,
Get, Length, Pop, Push, Put, Set, Show,
Max, Mean, Median, Min, Order, Prod, Sum, Variance,
- Precision, Base
+ Precision, Base, Deg, Grad, Rad
} func_t;
/* keyword type */
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;