xref: /plan9/sys/src/cmd/hoc/math.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier #include "hoc.h"
53e12c5d1SDavid du Colombier 
63e12c5d1SDavid du Colombier double	errcheck(double, char*);
73e12c5d1SDavid du Colombier 
83e12c5d1SDavid du Colombier double
Log(double x)93e12c5d1SDavid du Colombier Log(double x)
103e12c5d1SDavid du Colombier {
113e12c5d1SDavid du Colombier 	return errcheck(log(x), "log");
123e12c5d1SDavid du Colombier }
133e12c5d1SDavid du Colombier double
Log10(double x)143e12c5d1SDavid du Colombier Log10(double x)
153e12c5d1SDavid du Colombier {
163e12c5d1SDavid du Colombier 	return errcheck(log10(x), "log10");
173e12c5d1SDavid du Colombier }
183e12c5d1SDavid du Colombier 
193e12c5d1SDavid du Colombier double
Sqrt(double x)203e12c5d1SDavid du Colombier Sqrt(double x)
213e12c5d1SDavid du Colombier {
223e12c5d1SDavid du Colombier 	return errcheck(sqrt(x), "sqrt");
233e12c5d1SDavid du Colombier }
243e12c5d1SDavid du Colombier 
253e12c5d1SDavid du Colombier double
Exp(double x)263e12c5d1SDavid du Colombier Exp(double x)
273e12c5d1SDavid du Colombier {
283e12c5d1SDavid du Colombier 	return errcheck(exp(x), "exp");
293e12c5d1SDavid du Colombier }
303e12c5d1SDavid du Colombier 
313e12c5d1SDavid du Colombier double
Asin(double x)323e12c5d1SDavid du Colombier Asin(double x)
333e12c5d1SDavid du Colombier {
343e12c5d1SDavid du Colombier 	return errcheck(asin(x), "asin");
353e12c5d1SDavid du Colombier }
363e12c5d1SDavid du Colombier 
373e12c5d1SDavid du Colombier double
Acos(double x)383e12c5d1SDavid du Colombier Acos(double x)
393e12c5d1SDavid du Colombier {
403e12c5d1SDavid du Colombier 	return errcheck(acos(x), "acos");
413e12c5d1SDavid du Colombier }
423e12c5d1SDavid du Colombier 
433e12c5d1SDavid du Colombier double
Sinh(double x)443e12c5d1SDavid du Colombier Sinh(double x)
453e12c5d1SDavid du Colombier {
463e12c5d1SDavid du Colombier 	return errcheck(sinh(x), "sinh");
473e12c5d1SDavid du Colombier }
483e12c5d1SDavid du Colombier double
Cosh(double x)493e12c5d1SDavid du Colombier Cosh(double x)
503e12c5d1SDavid du Colombier {
513e12c5d1SDavid du Colombier 	return errcheck(cosh(x), "cosh");
523e12c5d1SDavid du Colombier }
533e12c5d1SDavid du Colombier double
Pow(double x,double y)543e12c5d1SDavid du Colombier Pow(double x, double y)
553e12c5d1SDavid du Colombier {
563e12c5d1SDavid du Colombier 	return errcheck(pow(x,y), "exponentiation");
573e12c5d1SDavid du Colombier }
583e12c5d1SDavid du Colombier 
593e12c5d1SDavid du Colombier double
integer(double x)603e12c5d1SDavid du Colombier integer(double x)
613e12c5d1SDavid du Colombier {
62*7dd7cddfSDavid du Colombier 	if(x<-2147483648.0 || x>2147483647.0)
63*7dd7cddfSDavid du Colombier 		execerror("argument out of domain", 0);
643e12c5d1SDavid du Colombier 	return (double)(long)x;
653e12c5d1SDavid du Colombier }
663e12c5d1SDavid du Colombier 
673e12c5d1SDavid du Colombier double
errcheck(double d,char * s)683e12c5d1SDavid du Colombier errcheck(double d, char* s)	/* check result of library call */
693e12c5d1SDavid du Colombier {
703e12c5d1SDavid du Colombier 	if(isNaN(d))
713e12c5d1SDavid du Colombier 		execerror(s, "argument out of domain");
723e12c5d1SDavid du Colombier 	if(isInf(d, 0))
733e12c5d1SDavid du Colombier 		execerror(s, "result out of range");
743e12c5d1SDavid du Colombier 	return d;
753e12c5d1SDavid du Colombier }
76