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