Date Type Android

//package edu.cmu.ri.createlab.util;
/**
 * @author Chris Bartley (bartley@cmu.edu)
 */
final class MathUtils {
  public static final double EPSILON = 0.0000001;
  private static final double ZERO = 0.0d;
  /**
   * Ensures that the given value is within the range
   * [-|maxValue|, |maxValue|]. Returns the given
   * value if it's within the range; otherwise, returns
   * -|maxValue| or |maxValue| as appropriate.
   */
  public static double ensureRange(final double value, final double maxValue) {
    final double absMaxValue = Math.abs(maxValue);
    if (value > absMaxValue) {
      return absMaxValue;
    }
    if (value < -absMaxValue) {
      return -absMaxValue;
    }
    return value;
  }
  /**
   * Ensures that the given value is within the range
   * [minValue, maxValue]. Returns the given value
   * if it's within the range; otherwise, returns minValue or
   * maxValue as appropriate. Performs idiot checking to make
   * sure that minValue isn't greater than maxValue
   * (swaps the values if it is).
   */
  public static double ensureRange(final double value, final double minValue,
      final double maxValue) {
    final double min;
    final double max;
    // idiot check
    if (minValue > maxValue) {
      min = maxValue;
      max = minValue;
    } else {
      min = minValue;
      max = maxValue;
    }
    if (value > max) {
      return max;
    }
    if (value < min) {
      return min;
    }
    return value;
  }
  /**
   * Ensures that the given value is within the range
   * [minValue, maxValue]. Returns the given value
   * if it's within the range; otherwise, returns minValue or
   * maxValue as appropriate. Performs idiot checking to make
   * sure that minValue isn't greater than maxValue
   * (swaps the values if it is).
   */
  public static int ensureRange(final int value, final int minValue,
      final int maxValue) {
    final int min;
    final int max;
    // idiot check
    if (minValue > maxValue) {
      min = maxValue;
      max = minValue;
    } else {
      min = minValue;
      max = maxValue;
    }
    if (value > max) {
      return max;
    }
    if (value < min) {
      return min;
    }
    return value;
  }
  /**
   * Returns true if the given numbers are equal within
   * {@link #EPSILON}; false otherwise.
   */
  public static boolean equals(final double d1, final double d2) {
    return equalToWithin(d1, d2, EPSILON);
  }
  /**
   * Returns true if the given numbers are equal within
   * epsilonfalse otherwise.
   */
  public static boolean equalToWithin(final double d1, final double d2,
      final double epsilon) {
    return Math.abs(d1 - d2) < epsilon;
  }
  public static boolean isNonZero(final double d) {
    return !equals(d, ZERO);
  }
  /**
   * Normalizes the given angle (which must be in radians) and
   * returns an angle in the range [-pi,pi).
   */
  public static double normalizeAngle(final double angle) {
    if ((angle < Math.PI) && (angle >= -Math.PI)) {
      return angle;
    } else if (equals(angle, Math.PI)) {
      return -Math.PI;
    } else if (angle > Math.PI) {
      return normalizeAngle(angle - 2 * Math.PI);
    } else {
      return normalizeAngle(angle + 2 * Math.PI);
    }
  }
  private MathUtils() {
    // private to prevent instantiation
  }
}