Various fixes and enhancements:
[measurements/measurements.git] / src / net / mattmccutchen / measurements / MeasurementMath.java
index 5ea44ab..273365b 100644 (file)
@@ -71,6 +71,20 @@ public class MeasurementMath {
                        up);
        }
        
+       public static Measurement rootint(Measurement a, int b) {
+               if (a == null)
+                       return null;
+               int[] up = new int[Unit.basicUnits.length];
+               for (int i = 0; i < Unit.basicUnits.length; i++) {
+                       if (Math.abs(a.unitPowers[i]) % b != 0)
+                               return null;
+                       up[i] = a.unitPowers[i] / b;
+               }
+               return new Measurement(Math.pow(a.number, 1.0/b),
+                       a.uncertainty / b * Math.pow(a.number, (1.0/b)-1),
+                       up);
+       }
+       
        public static Measurement pow(Measurement a, Measurement b) {
                if (a == null || !isPureNumber(a) || b == null || !isPureNumber(b))
                        return null;
@@ -81,6 +95,22 @@ public class MeasurementMath {
                        Measurement.pureNumberUnitPowers);
        }
        
+       public static Measurement exp(Measurement m) {
+               if (m == null || !isPureNumber(m))
+                       return null;
+               return new Measurement(Math.exp(m.number),
+                       m.uncertainty * Math.exp(m.number),
+                       Measurement.pureNumberUnitPowers);
+       }
+       
+       public static Measurement ln(Measurement m) {
+               if (m == null || !isPureNumber(m))
+                       return null;
+               return new Measurement(Math.log(m.number),
+                       m.uncertainty / m.number,
+                       Measurement.pureNumberUnitPowers);
+       }
+       
        public static double cmp(Measurement a, Measurement b) {
                if (a == null || b == null || !unitsSame(a, b))
                        return Double.NaN;