1 cananian 1.1.2.1 // INMath.java, created Sat Jan 29 23:01:14 2000 by cananian 2 cananian 1.1.2.1 // Copyright (C) 2000 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.Interpret.Quads; 5 cananian 1.1.2.1 6 cananian 1.1.2.1 import harpoon.ClassFile.HClass; 7 cananian 1.1.2.1 import harpoon.ClassFile.HField; 8 cananian 1.1.2.1 import harpoon.ClassFile.HMethod; 9 cananian 1.1.2.1 10 cananian 1.1.2.1 /** 11 cananian 1.1.2.1 * <code>INMath</code> provides implementations for (some of) the native 12 cananian 1.1.2.1 * methods in <code>java.lang.Math</code>. 13 cananian 1.1.2.1 * 14 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 15 cananian 1.2 * @version $Id: INMath.java,v 1.2 2002/02/25 21:05:46 cananian Exp $ 16 cananian 1.1.2.1 */ 17 cananian 1.1.2.1 public class INMath { 18 cananian 1.1.2.1 static final void register(StaticState ss) { 19 cananian 1.1.2.1 ss.register(acos(ss)); 20 cananian 1.1.2.1 ss.register(asin(ss)); 21 cananian 1.1.2.1 ss.register(atan2(ss)); 22 cananian 1.1.2.1 ss.register(atan(ss)); 23 cananian 1.1.2.1 ss.register(ceil(ss)); 24 cananian 1.1.2.1 ss.register(cos(ss)); 25 cananian 1.1.2.1 ss.register(exp(ss)); 26 cananian 1.1.2.1 ss.register(floor(ss)); 27 cananian 1.1.2.1 ss.register(IEEEremainder(ss)); 28 cananian 1.1.2.1 ss.register(log(ss)); 29 cananian 1.1.2.1 ss.register(pow(ss)); 30 cananian 1.1.2.1 ss.register(rint(ss)); 31 cananian 1.1.2.1 ss.register(sin(ss)); 32 cananian 1.1.2.1 ss.register(sqrt(ss)); 33 cananian 1.1.2.1 ss.register(tan(ss)); 34 cananian 1.1.2.1 } 35 cananian 1.1.2.1 36 cananian 1.1.2.1 private static final NativeMethod acos(StaticState ss0) { 37 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("acos","(D)D"); 38 cananian 1.1.2.1 return new NativeMethod() { 39 cananian 1.1.2.1 HMethod getMethod() { return hm; } 40 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 41 cananian 1.1.2.1 Double d = (Double) params[0]; 42 cananian 1.1.2.1 return new Double(Math.acos(d.doubleValue())); 43 cananian 1.1.2.1 } 44 cananian 1.1.2.1 }; 45 cananian 1.1.2.1 } 46 cananian 1.1.2.1 private static final NativeMethod asin(StaticState ss0) { 47 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("asin","(D)D"); 48 cananian 1.1.2.1 return new NativeMethod() { 49 cananian 1.1.2.1 HMethod getMethod() { return hm; } 50 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 51 cananian 1.1.2.1 Double d = (Double) params[0]; 52 cananian 1.1.2.1 return new Double(Math.asin(d.doubleValue())); 53 cananian 1.1.2.1 } 54 cananian 1.1.2.1 }; 55 cananian 1.1.2.1 } 56 cananian 1.1.2.1 private static final NativeMethod atan2(StaticState ss0) { 57 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("atan2","(DD)D"); 58 cananian 1.1.2.1 return new NativeMethod() { 59 cananian 1.1.2.1 HMethod getMethod() { return hm; } 60 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 61 cananian 1.1.2.1 double a = ((Double) params[0]).doubleValue(); 62 cananian 1.1.2.1 double b = ((Double) params[1]).doubleValue(); 63 cananian 1.1.2.1 return new Double(Math.atan2(a,b)); 64 cananian 1.1.2.1 } 65 cananian 1.1.2.1 }; 66 cananian 1.1.2.1 } 67 cananian 1.1.2.1 private static final NativeMethod atan(StaticState ss0) { 68 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("atan","(D)D"); 69 cananian 1.1.2.1 return new NativeMethod() { 70 cananian 1.1.2.1 HMethod getMethod() { return hm; } 71 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 72 cananian 1.1.2.1 Double d = (Double) params[0]; 73 cananian 1.1.2.1 return new Double(Math.atan(d.doubleValue())); 74 cananian 1.1.2.1 } 75 cananian 1.1.2.1 }; 76 cananian 1.1.2.1 } 77 cananian 1.1.2.1 private static final NativeMethod ceil(StaticState ss0) { 78 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("ceil","(D)D"); 79 cananian 1.1.2.1 return new NativeMethod() { 80 cananian 1.1.2.1 HMethod getMethod() { return hm; } 81 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 82 cananian 1.1.2.1 Double d = (Double) params[0]; 83 cananian 1.1.2.1 return new Double(Math.ceil(d.doubleValue())); 84 cananian 1.1.2.1 } 85 cananian 1.1.2.1 }; 86 cananian 1.1.2.1 } 87 cananian 1.1.2.1 private static final NativeMethod cos(StaticState ss0) { 88 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("cos","(D)D"); 89 cananian 1.1.2.1 return new NativeMethod() { 90 cananian 1.1.2.1 HMethod getMethod() { return hm; } 91 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 92 cananian 1.1.2.1 Double d = (Double) params[0]; 93 cananian 1.1.2.1 return new Double(Math.cos(d.doubleValue())); 94 cananian 1.1.2.1 } 95 cananian 1.1.2.1 }; 96 cananian 1.1.2.1 } 97 cananian 1.1.2.1 private static final NativeMethod exp(StaticState ss0) { 98 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("exp","(D)D"); 99 cananian 1.1.2.1 return new NativeMethod() { 100 cananian 1.1.2.1 HMethod getMethod() { return hm; } 101 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 102 cananian 1.1.2.1 Double d = (Double) params[0]; 103 cananian 1.1.2.1 return new Double(Math.exp(d.doubleValue())); 104 cananian 1.1.2.1 } 105 cananian 1.1.2.1 }; 106 cananian 1.1.2.1 } 107 cananian 1.1.2.1 private static final NativeMethod floor(StaticState ss0) { 108 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("floor","(D)D"); 109 cananian 1.1.2.1 return new NativeMethod() { 110 cananian 1.1.2.1 HMethod getMethod() { return hm; } 111 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 112 cananian 1.1.2.1 Double d = (Double) params[0]; 113 cananian 1.1.2.1 return new Double(Math.floor(d.doubleValue())); 114 cananian 1.1.2.1 } 115 cananian 1.1.2.1 }; 116 cananian 1.1.2.1 } 117 cananian 1.1.2.1 private static final NativeMethod IEEEremainder(StaticState ss0) { 118 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("IEEEremainder","(DD)D"); 119 cananian 1.1.2.1 return new NativeMethod() { 120 cananian 1.1.2.1 HMethod getMethod() { return hm; } 121 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 122 cananian 1.1.2.1 double a = ((Double) params[0]).doubleValue(); 123 cananian 1.1.2.1 double b = ((Double) params[1]).doubleValue(); 124 cananian 1.1.2.1 return new Double(Math.IEEEremainder(a,b)); 125 cananian 1.1.2.1 } 126 cananian 1.1.2.1 }; 127 cananian 1.1.2.1 } 128 cananian 1.1.2.1 private static final NativeMethod log(StaticState ss0) { 129 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("log","(D)D"); 130 cananian 1.1.2.1 return new NativeMethod() { 131 cananian 1.1.2.1 HMethod getMethod() { return hm; } 132 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 133 cananian 1.1.2.1 Double d = (Double) params[0]; 134 cananian 1.1.2.1 return new Double(Math.log(d.doubleValue())); 135 cananian 1.1.2.1 } 136 cananian 1.1.2.1 }; 137 cananian 1.1.2.1 } 138 cananian 1.1.2.1 private static final NativeMethod pow(StaticState ss0) { 139 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("pow","(DD)D"); 140 cananian 1.1.2.1 return new NativeMethod() { 141 cananian 1.1.2.1 HMethod getMethod() { return hm; } 142 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 143 cananian 1.1.2.1 double a = ((Double) params[0]).doubleValue(); 144 cananian 1.1.2.1 double b = ((Double) params[1]).doubleValue(); 145 cananian 1.1.2.1 return new Double(Math.pow(a,b)); 146 cananian 1.1.2.1 } 147 cananian 1.1.2.1 }; 148 cananian 1.1.2.1 } 149 cananian 1.1.2.1 private static final NativeMethod rint(StaticState ss0) { 150 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("rint","(D)D"); 151 cananian 1.1.2.1 return new NativeMethod() { 152 cananian 1.1.2.1 HMethod getMethod() { return hm; } 153 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 154 cananian 1.1.2.1 Double d = (Double) params[0]; 155 cananian 1.1.2.1 return new Double(Math.rint(d.doubleValue())); 156 cananian 1.1.2.1 } 157 cananian 1.1.2.1 }; 158 cananian 1.1.2.1 } 159 cananian 1.1.2.1 private static final NativeMethod sin(StaticState ss0) { 160 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("sin","(D)D"); 161 cananian 1.1.2.1 return new NativeMethod() { 162 cananian 1.1.2.1 HMethod getMethod() { return hm; } 163 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 164 cananian 1.1.2.1 Double d = (Double) params[0]; 165 cananian 1.1.2.1 return new Double(Math.sin(d.doubleValue())); 166 cananian 1.1.2.1 } 167 cananian 1.1.2.1 }; 168 cananian 1.1.2.1 } 169 cananian 1.1.2.1 private static final NativeMethod sqrt(StaticState ss0) { 170 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("sqrt","(D)D"); 171 cananian 1.1.2.1 return new NativeMethod() { 172 cananian 1.1.2.1 HMethod getMethod() { return hm; } 173 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 174 cananian 1.1.2.1 Double d = (Double) params[0]; 175 cananian 1.1.2.1 return new Double(Math.sqrt(d.doubleValue())); 176 cananian 1.1.2.1 } 177 cananian 1.1.2.1 }; 178 cananian 1.1.2.1 } 179 cananian 1.1.2.1 private static final NativeMethod tan(StaticState ss0) { 180 cananian 1.1.2.1 final HMethod hm = ss0.HCmath.getMethod("tan","(D)D"); 181 cananian 1.1.2.1 return new NativeMethod() { 182 cananian 1.1.2.1 HMethod getMethod() { return hm; } 183 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 184 cananian 1.1.2.1 Double d = (Double) params[0]; 185 cananian 1.1.2.1 return new Double(Math.tan(d.doubleValue())); 186 cananian 1.1.2.1 } 187 cananian 1.1.2.1 }; 188 cananian 1.1.2.1 } 189 cananian 1.2 }