xref: /plan9/sys/src/cmd/hoc/math.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
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