Wed Apr 17 14:14:36 CEST 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / sysmath.c
1 /* math.c - these are based on bob smith's csharp routines */\r
2 \r
3 #include <math.h>\r
4 #include <mono/metadata/sysmath.h>\r
5 \r
6 static const gdouble MONO_NAN = 0.0 / 0.0;\r
7 static const gdouble MONO_INF = 1.0 / 0.0;\r
8 \r
9 gdouble \r
10 ves_icall_System_Math_Sin (gdouble x)\r
11 {\r
12         return sin (x);\r
13 }\r
14 \r
15 gdouble \r
16 ves_icall_System_Math_Cos (gdouble x)\r
17 {\r
18         return cos (x);\r
19 }\r
20 \r
21 gdouble \r
22 ves_icall_System_Math_Tan (gdouble x)\r
23 {\r
24         return tan (x);\r
25 }\r
26 \r
27 gdouble \r
28 ves_icall_System_Math_Sinh (gdouble x)\r
29 {\r
30         return sinh (x);\r
31 }\r
32 \r
33 gdouble \r
34 ves_icall_System_Math_Cosh (gdouble x)\r
35 {\r
36         return cosh (x);\r
37 }\r
38 \r
39 gdouble \r
40 ves_icall_System_Math_Tanh (gdouble x)\r
41 {\r
42         return tanh (x);\r
43 }\r
44 \r
45 gdouble \r
46 ves_icall_System_Math_Acos (gdouble x)\r
47 {\r
48         if (x < -1 || x > 1)\r
49                 return MONO_NAN;\r
50 \r
51         return acos (x);\r
52 }\r
53 \r
54 gdouble \r
55 ves_icall_System_Math_Asin (gdouble x)\r
56 {\r
57         if (x < -1 || x > 1)\r
58                 return MONO_NAN;\r
59 \r
60         return acos (x);\r
61 }\r
62 \r
63 gdouble \r
64 ves_icall_System_Math_Atan (gdouble x)\r
65 {\r
66         return atan (x);\r
67 }\r
68 \r
69 gdouble \r
70 ves_icall_System_Math_Atan2 (gdouble y, gdouble x)\r
71 {\r
72         return atan2 (y, x);\r
73 }\r
74 \r
75 gdouble \r
76 ves_icall_System_Math_Exp (gdouble x)\r
77 {\r
78         return exp (x);\r
79 }\r
80 \r
81 gdouble \r
82 ves_icall_System_Math_Log (gdouble x)\r
83 {\r
84         if (x == 0)\r
85                 return -MONO_INF;\r
86         else if (x < 0)\r
87                 return MONO_NAN;\r
88 \r
89         return log (x);\r
90 }\r
91 \r
92 gdouble \r
93 ves_icall_System_Math_Log10 (gdouble x)\r
94 {\r
95         if (x == 0)\r
96                 return -MONO_INF;\r
97         else if (x < 0)\r
98                 return MONO_NAN;\r
99 \r
100         return log10 (x);\r
101 }\r
102 \r
103 gdouble \r
104 ves_icall_System_Math_Pow (gdouble x, gdouble y)\r
105 {\r
106         return pow (x, y);\r
107 }\r
108 \r
109 gdouble \r
110 ves_icall_System_Math_Sqrt (gdouble x)\r
111 {\r
112         if (x < 0)\r
113                 return MONO_NAN;\r
114 \r
115         return sqrt (x);\r
116 }\r