1
8
9 import com.sekati.math.Integer;
10
11
14 class com.sekati.math.MathBase {
15
16
21 public static function max():Number {
22 return maxArray( arguments );
23 }
24
25
30 public static function min():Number {
31 return minArray( arguments );
32 }
33
34
40 public static function maxArray(a:Array):Number {
41 var val:Number = null;
42 for (var i in a) {
43 if (a[i] > val || val == null) {
44 val = Number( a[i] );
45 }
46 }
47 return val;
48 }
49
50
56 public static function minArray(a:Array):Number {
57 var val:Number = null;
58 for (var i in a) {
59 if (a[i] < val || val == null) {
60 val = Number( a[i] );
61 }
62 }
63 return val;
64 }
65
66
72 public static function floor(val:Number, decimal:Number):Number {
73 var n:Number = Math.pow( 10, decimal );
74 return Math.floor( val * n ) / n;
75 }
76
77
83 public static function round(val:Number, decimal:Number):Number {
84 return Math.round( val * Math.pow( 10, decimal ) ) / Math.pow( 10, decimal );
85 }
86
87
95 public static function roundHalf(val:Number):Number {
96 var num:String = String( Math.round( val * 10 ) / 10 );
97 var tmp:Array = num.split( "." );
98 var integer:Object = tmp[0];
99
100 var decimal:Number = tmp[1];
101 if (decimal >= 3 && decimal <= 7 && decimal != null) {
102 decimal = 5;
103 } else {
104 if (decimal > 7) {
105 integer = Number( integer ) + 1;
106 }
107 decimal = 0;
108 }
109 return Number( integer + "." + decimal );
110 }
111
112
123 public static function constrain(val:Number, min:Number, max:Number):Number {
124 if (val < min) {
125 val = min;
126 } else if (val > max) {
127 val = max;
128 }
129 return val;
130 }
131
132
141 public static function proportion(x1:Number, x2:Number, y1:Number, y2:Number, x:Number):Number {
142 var n:Number = (!x) ? 1 : x;
143 var slope:Number = (y2 - y1) / (x2 - x1);
144 return (slope * (n - x1) + y1);
145 }
146
147
152 public static function isPositive(n:Number):Boolean {
153 return (n >= 0);
154 }
155
156
161 public static function isNegative(n:Number):Boolean {
162 return (n < 0);
163 }
164
165
170 public static function isOdd(n:Number):Boolean {
171 var i:Integer = new Integer( n );
172 var e:Integer = new Integer( 2 );
173 return Boolean( i % e );
174 }
175
176
181 public static function isEven(n:Number):Boolean {
182 var int:Integer = new Integer( n );
183 var e:Integer = new Integer( 2 );
184 return (int % e == 0);
185 }
186
187
192 public static function isPrime(n:Number):Boolean {
193 if (n > 2 && n % 2 == 0) return false;
194 var l:Number = Math.sqrt( n );
195 for (var i:Number = 3; i <= l ; i += 2) {
196 if (n % i == 0) return false;
197 }
198 }
199
200
205
206 public static function factorial(n:Number):Number {
207 if (n == 0) return 1;
208 var d:Number = n.valueOf( );
209 var i:Number = d - 1;
210 while (i) {
211 d = d * i;
212 i--;
213 }
214 return d;
215 }
216
217
222 public static function getDivisors(n:Number):Array {
223 var r:Array = new Array( );
224 for (var i:Number = 1, e:Number = n / 2; i <= e ; i++) {
225 if (n % i == 0) r.push( i );
226 }
227 if (n != 0) r.push( n.valueOf( ) );
228 return r;
229 }
230
231
236 public static function isInteger(n:Number):Boolean {
237 return (n % 1 == 0);
238 }
239
240
245 public static function isNatural(n:Number):Boolean {
246 return (n >= 0 && n % 1 == 0);
247 }
248
249
255 public static function rnd(start:Number, end:Number):Number {
256 return Math.round( Math.random( ) * (end - start) ) + start;
257 }
258
259
266 public static function sanitizeFloat(n:Number, precision:Number):Number {
267 var p:Number = (!precision) ? 5 : int( precision );
268 var c:Number = Math.pow( 10, p );
269 return Math.round( c * n ) / c;
270 }
271
272
280 public static function fuzzyEval(n1:Number, n2:Number, precision:Number):Boolean {
281 var d:Number = n1 - n2;
282 var p:Number = (!precision) ? 5 : int( precision );
283 var r:Number = Math.pow( 10, -p );
284 return d < r && d > -r;
285 }
286
287 private function MathBase() {
288 }
289 }