1*3e12c5d1SDavid du Colombier #include <u.h> 2*3e12c5d1SDavid du Colombier #include <libc.h> 3*3e12c5d1SDavid du Colombier 4*3e12c5d1SDavid du Colombier #include "hoc.h" 5*3e12c5d1SDavid du Colombier 6*3e12c5d1SDavid du Colombier double errcheck(double, char*); 7*3e12c5d1SDavid du Colombier 8*3e12c5d1SDavid du Colombier double 9*3e12c5d1SDavid du Colombier Log(double x) 10*3e12c5d1SDavid du Colombier { 11*3e12c5d1SDavid du Colombier return errcheck(log(x), "log"); 12*3e12c5d1SDavid du Colombier } 13*3e12c5d1SDavid du Colombier double 14*3e12c5d1SDavid du Colombier Log10(double x) 15*3e12c5d1SDavid du Colombier { 16*3e12c5d1SDavid du Colombier return errcheck(log10(x), "log10"); 17*3e12c5d1SDavid du Colombier } 18*3e12c5d1SDavid du Colombier 19*3e12c5d1SDavid du Colombier double 20*3e12c5d1SDavid du Colombier Sqrt(double x) 21*3e12c5d1SDavid du Colombier { 22*3e12c5d1SDavid du Colombier return errcheck(sqrt(x), "sqrt"); 23*3e12c5d1SDavid du Colombier } 24*3e12c5d1SDavid du Colombier 25*3e12c5d1SDavid du Colombier double 26*3e12c5d1SDavid du Colombier Gamma(double x) 27*3e12c5d1SDavid du Colombier { 28*3e12c5d1SDavid du Colombier double y; 29*3e12c5d1SDavid du Colombier extern int signgam; 30*3e12c5d1SDavid du Colombier y=errcheck(gamma(x), "gamma"); 31*3e12c5d1SDavid du Colombier if(y>88.0) 32*3e12c5d1SDavid du Colombier execerror("gamma result out of range", (char *)0); 33*3e12c5d1SDavid du Colombier return signgam*exp(y); 34*3e12c5d1SDavid du Colombier } 35*3e12c5d1SDavid du Colombier 36*3e12c5d1SDavid du Colombier double 37*3e12c5d1SDavid du Colombier Exp(double x) 38*3e12c5d1SDavid du Colombier { 39*3e12c5d1SDavid du Colombier return errcheck(exp(x), "exp"); 40*3e12c5d1SDavid du Colombier } 41*3e12c5d1SDavid du Colombier 42*3e12c5d1SDavid du Colombier double 43*3e12c5d1SDavid du Colombier Asin(double x) 44*3e12c5d1SDavid du Colombier { 45*3e12c5d1SDavid du Colombier return errcheck(asin(x), "asin"); 46*3e12c5d1SDavid du Colombier } 47*3e12c5d1SDavid du Colombier 48*3e12c5d1SDavid du Colombier double 49*3e12c5d1SDavid du Colombier Acos(double x) 50*3e12c5d1SDavid du Colombier { 51*3e12c5d1SDavid du Colombier return errcheck(acos(x), "acos"); 52*3e12c5d1SDavid du Colombier } 53*3e12c5d1SDavid du Colombier 54*3e12c5d1SDavid du Colombier double 55*3e12c5d1SDavid du Colombier Sinh(double x) 56*3e12c5d1SDavid du Colombier { 57*3e12c5d1SDavid du Colombier return errcheck(sinh(x), "sinh"); 58*3e12c5d1SDavid du Colombier } 59*3e12c5d1SDavid du Colombier double 60*3e12c5d1SDavid du Colombier Cosh(double x) 61*3e12c5d1SDavid du Colombier { 62*3e12c5d1SDavid du Colombier return errcheck(cosh(x), "cosh"); 63*3e12c5d1SDavid du Colombier } 64*3e12c5d1SDavid du Colombier double 65*3e12c5d1SDavid du Colombier Pow(double x, double y) 66*3e12c5d1SDavid du Colombier { 67*3e12c5d1SDavid du Colombier return errcheck(pow(x,y), "exponentiation"); 68*3e12c5d1SDavid du Colombier } 69*3e12c5d1SDavid du Colombier 70*3e12c5d1SDavid du Colombier double 71*3e12c5d1SDavid du Colombier integer(double x) 72*3e12c5d1SDavid du Colombier { 73*3e12c5d1SDavid du Colombier return (double)(long)x; 74*3e12c5d1SDavid du Colombier } 75*3e12c5d1SDavid du Colombier 76*3e12c5d1SDavid du Colombier double 77*3e12c5d1SDavid du Colombier errcheck(double d, char* s) /* check result of library call */ 78*3e12c5d1SDavid du Colombier { 79*3e12c5d1SDavid du Colombier if(isNaN(d)) 80*3e12c5d1SDavid du Colombier execerror(s, "argument out of domain"); 81*3e12c5d1SDavid du Colombier if(isInf(d, 0)) 82*3e12c5d1SDavid du Colombier execerror(s, "result out of range"); 83*3e12c5d1SDavid du Colombier return d; 84*3e12c5d1SDavid du Colombier } 85