1 // Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL]
8 /** The JavaScript Math object */
9 public class JSMath extends JSCallable {
11 public static JSMath singleton = new JSMath();
13 public Object call(Object method, JSArray args) {
14 if (method == null) throw new JS.Exn("you cannot call this object");
16 case "ceil": return new Long((long)java.lang.Math.ceil(JS.toNumber(args.elementAt(0)).doubleValue()));
17 case "floor": return new Long((long)java.lang.Math.floor(JS.toNumber(args.elementAt(0)).doubleValue()));
18 case "round": return new Long((long)java.lang.Math.round(JS.toNumber(args.elementAt(0)).doubleValue()));
19 case "min": return new Double(java.lang.Math.min(JS.toNumber(args.elementAt(0)).doubleValue(),
20 JS.toNumber(args.elementAt(1)).doubleValue()));
21 case "max": return new Double(java.lang.Math.max(JS.toNumber(args.elementAt(0)).doubleValue(),
22 JS.toNumber(args.elementAt(1)).doubleValue()));
23 case "pow": return new Double(java.lang.Math.pow(JS.toNumber(args.elementAt(0)).doubleValue(),
24 JS.toNumber(args.elementAt(1)).doubleValue()));
25 case "atan2": return new Double(java.lang.Math.atan2(JS.toNumber(args.elementAt(0)).doubleValue(),
26 JS.toNumber(args.elementAt(1)).doubleValue()));
27 case "abs": return new Double(java.lang.Math.abs(JS.toNumber(args.elementAt(0)).doubleValue()));
28 case "sin": return new Double(java.lang.Math.sin(JS.toNumber(args.elementAt(0)).doubleValue()));
29 case "cos": return new Double(java.lang.Math.cos(JS.toNumber(args.elementAt(0)).doubleValue()));
30 case "tan": return new Double(java.lang.Math.tan(JS.toNumber(args.elementAt(0)).doubleValue()));
31 case "asin": return new Double(java.lang.Math.asin(JS.toNumber(args.elementAt(0)).doubleValue()));
32 case "acos": return new Double(java.lang.Math.acos(JS.toNumber(args.elementAt(0)).doubleValue()));
33 case "atan": return new Double(java.lang.Math.atan(JS.toNumber(args.elementAt(0)).doubleValue()));
34 case "sqrt": return new Double(java.lang.Math.sqrt(JS.toNumber(args.elementAt(0)).doubleValue()));
35 case "exp": return new Double(java.lang.Math.exp(JS.toNumber(args.elementAt(0)).doubleValue()));
36 case "log": return new Double(java.lang.Math.log(JS.toNumber(args.elementAt(0)).doubleValue()));
37 case "random": return new Double(java.lang.Math.random());
42 private static final Double E = new Double(java.lang.Math.E);
43 private static final Double PI = new Double(java.lang.Math.PI);
44 private static final Double LN10 = new Double(java.lang.Math.log(10));
45 private static final Double LN2 = new Double(java.lang.Math.log(2));
46 private static final Double LOG10E = new Double(1/java.lang.Math.log(10));
47 private static final Double LOG2E = new Double(1/java.lang.Math.log(2));
48 private static final Double SQRT1_2 = new Double(1/java.lang.Math.sqrt(2));
49 private static final Double SQRT2 = new Double(java.lang.Math.sqrt(2));
51 public void put(Object key, Object val) { return; }
53 public Object get(Object key, Object val) {
56 case "LN10": return LN10;
57 case "LN2": return LN2;
58 case "LOG10E": return LOG10E;
59 case "LOG2E": return LOG2E;
61 case "SQRT1_2": return SQRT1_2;
62 case "SQRT2": return SQRT2;