5 // Bob Smith (bob@thestuff.net)
7 // (C) 2001 Bob Smith. http://www.thestuff.net
12 using System.Globalization;
13 using System.Runtime.InteropServices;
18 public sealed class Math
20 public const double E = 2.7182818284590452354;
21 public const double PI = 3.14159265358979323846;
22 public static decimal Abs(decimal value)
24 return (value < 0)? -value: value;
26 public static double Abs(double value)
28 return (value < 0)? -value: value;
30 public static float Abs(float value)
32 return (value < 0)? -value: value;
34 public static int Abs(int value)
36 if (value == Int32.MinValue)
37 throw new OverflowException (Locale.GetText (Locale.GetText ("Value is too small")));
38 return (value < 0)? -value: value;
40 public static long Abs(long value)
42 if (value == Int64.MinValue)
43 throw new OverflowException(Locale.GetText ("Value is too small"));
44 return (value < 0)? -value: value;
46 public static sbyte Abs(sbyte value)
48 if (value == SByte.MinValue)
49 throw new OverflowException(Locale.GetText ("Value is too small"));
50 return (sbyte)((value < 0)? -value: value);
52 public static short Abs(short value)
54 if (value == Int16.MinValue)
55 throw new OverflowException(Locale.GetText ("Value is too small"));
56 return (short)((value < 0)? -value: value);
59 public static double Acos(double d)
61 if (d < -1 || d > 1) return Double.NaN;
65 public static double Asin(double d)
67 if (d < -1 || d > 1) return Double.NaN;
71 public static double Atan(double d)
76 public static double Atan2(double y, double x)
78 return OpSys.Atan2(y, x);
81 public static double Ceiling(double a)
83 double b = (double)((long)a);
84 return (b < a)? b+1: b;
87 public static double Cos(double d)
92 public static double Cosh(double value)
94 return OpSys.Cosh(value);
97 public static double Exp(double d)
102 public static double Floor(double d) {
103 return (double)((long)d) ;
105 public static double IEEERemainder(double x, double y)
108 if (y == 0) return Double.NaN;
109 r = x - (y * Math.Round(x/y));
110 if (r != 0) return r;
111 return (x > 0)? 0: -0;
114 public static double Log(double d)
116 if (d == 0) return Double.NegativeInfinity;
117 else if (d < 0) return Double.NaN;
120 public static double Log(double a, double newBase)
122 if (a == 0) return Double.NegativeInfinity;
123 else if (a < 0) return Double.NaN;
124 return OpSys.Log(a)/OpSys.Log(newBase);
127 public static double Log10(double d)
129 if (d == 0) return Double.NegativeInfinity;
130 else if (d < 0) return Double.NaN;
131 return OpSys.Log10(d);
133 public static byte Max(byte val1, byte val2)
135 return (val1 > val2)? val1: val2;
137 public static decimal Max(decimal val1, decimal val2)
139 return (val1 > val2)? val1: val2;
141 public static double Max(double val1, double val2)
143 return (val1 > val2)? val1: val2;
145 public static float Max(float val1, float val2)
147 return (val1 > val2)? val1: val2;
149 public static int Max(int val1, int val2)
151 return (val1 > val2)? val1: val2;
153 public static long Max(long val1, long val2)
155 return (val1 > val2)? val1: val2;
157 public static sbyte Max(sbyte val1, sbyte val2)
159 return (val1 > val2)? val1: val2;
161 public static short Max(short val1, short val2)
163 return (val1 > val2)? val1: val2;
165 public static uint Max(uint val1, uint val2)
167 return (val1 > val2)? val1: val2;
169 public static ulong Max(ulong val1, ulong val2)
171 return (val1 > val2)? val1: val2;
173 public static ushort Max(ushort val1, ushort val2)
175 return (val1 > val2)? val1: val2;
177 public static byte Min(byte val1, byte val2)
179 return (val1 < val2)? val1: val2;
181 public static decimal Min(decimal val1, decimal val2)
183 return (val1 < val2)? val1: val2;
185 public static double Min(double val1, double val2)
187 return (val1 < val2)? val1: val2;
189 public static float Min(float val1, float val2)
191 return (val1 < val2)? val1: val2;
193 public static int Min(int val1, int val2)
195 return (val1 < val2)? val1: val2;
197 public static long Min(long val1, long val2)
199 return (val1 < val2)? val1: val2;
201 public static sbyte Min(sbyte val1, sbyte val2)
203 return (val1 < val2)? val1: val2;
205 public static short Min(short val1, short val2)
207 return (val1 < val2)? val1: val2;
209 public static uint Min(uint val1, uint val2)
211 return (val1 < val2)? val1: val2;
213 public static ulong Min(ulong val1, ulong val2)
215 return (val1 < val2)? val1: val2;
217 public static ushort Min(ushort val1, ushort val2)
219 return (val1 < val2)? val1: val2;
222 public static double Pow(double x, double y)
224 return OpSys.Pow(x, y);
227 public static decimal Round(decimal d)
229 decimal r = (decimal)((long)d);
231 if (a > .5M) return ++r;
232 else if (a <.5M) return r;
235 if (r%2 == 0) return r;
239 public static decimal Round(decimal d, int decimals)
244 if (decimals < 0 || decimals > 15)
245 throw new ArgumentOutOfRangeException(Locale.GetText (
246 "Value is too small or too big."));
247 else if (decimals == 0)
248 return Math.Round(d);
249 for (c=0; c<decimals; c++) p*=10;
251 retval=Math.Round(retval);
255 public static double Round(double d)
257 double r = (double)((long)d);
259 if (a > .5) return ++r;
260 else if (a <.5) return r;
263 if (r%2 == 0) return r;
267 public static double Round(double value, int digits) {
270 double retval = value;
271 if (digits < 0 || digits > 15)
272 throw new ArgumentOutOfRangeException(Locale.GetText (
273 "Value is too small or too big."));
274 else if (digits == 0)
275 return Math.Round(value);
276 for (c=0; c<digits; c++) p*=10;
278 retval=Math.Round(retval);
282 public static int Sign(decimal value)
284 if (value > 0) return 1;
285 return (value == 0)? 0: -1;
287 public static int Sign(double value)
289 if (value > 0) return 1;
290 return (value == 0)? 0: -1;
292 public static int Sign(float value)
294 if (value > 0) return 1;
295 return (value == 0)? 0: -1;
297 public static int Sign(int value)
299 if (value > 0) return 1;
300 return (value == 0)? 0: -1;
302 public static int Sign(long value)
304 if (value > 0) return 1;
305 return (value == 0)? 0: -1;
307 public static int Sign(sbyte value)
309 if (value > 0) return 1;
310 return (value == 0)? 0: -1;
312 public static int Sign(short value)
314 if (value > 0) return 1;
315 return (value == 0)? 0: -1;
318 public static double Sin(double a)
323 public static double Sinh(double value)
325 return OpSys.Sinh(value);
328 public static double Sqrt(double d)
330 if (d < 0) return Double.NaN;
331 return OpSys.Sqrt(d);
334 public static double Tan(double a)
339 public static double Tanh(double value)
341 return OpSys.Tanh(value);