// MathUtility.java

/**
 * Contains some static methods to perform
 * routine mathematical chores.
 *
 * @author D. Nixon
 */
public class MathUtility  {

   /**
    * Raises a floating-point number to a
    * specified integer power.
    *
    * @param base the number to be raised to a power.
    * @param exponent the integer exponent.
    * @return base raised to the exponent power.
    */
   public static double power(float base, int exponent)
   {
      if ( exponent < 0 )  {
         exponent = 0 - exponent;
         base = 1 / base;
      }  // if exponent < 0

      double product = 1;
      for ( int i = 0; i < exponent; i++ )
         product *= base;
      return product;
   }  // method power(float, int)

   /**
    * Raises an integer to a specified integer power,
    * returning a long integer.
    *
    * Note that raising an integer to an integer power
    * can yield an integer value only if the exponent
    * is non-negative. 
    *
    * @param base the number to be raised to a power.
    * @param exponent the integer exponent.
    * @return base raised to the exponent power,
    *            if exponent is non-negative.
    *            Otherwise, returns zero and prints
    *            an error message to the standard
    *            error stream.
    */
   public static long power(int base, int exponent)
   {
      if (exponent < 0)  {
         System.err.println("Error: MathUtility.power(int, int) "
                            + "cannot handle exponent "
                            + exponent + " < 0.");
         System.err.println("Non-negative exponent required to "
                            + "return long integer value.");
         return 0;
      }  // if exponent < 0

      long product = 1;
      for ( int i = 0; i < exponent; i++ )
         product *= base;
      return product;
   }  // method power(int, int)

}  // class MathUtility