////////////////// class Matte //////////////////////////////

package hjelpeklasser;

public class Matte
{
  private Matte() {}   // hindrer instansiering

  public static double log2(double x)
  {
    return Math.log(x)/Math.log(2);
  }

  public static int ceilLog2(int n)
  {
    if (n < 1) throw new IllegalArgumentException
      ("Logaritmen er ikke definert for n = " + n);

    return 32 - Integer.numberOfLeadingZeros(n - 1);
  }

  public static int floorLog2(int n)
  {
    if (n < 1) throw new IllegalArgumentException
      ("Logaritmen er ikke definert for n = " + n);

    return 31 - Integer.numberOfLeadingZeros(n);
  }

  public static double harmonisk(int n)
  {
    double sum = 0.0;
    for (int i = 1; i <= n; i++) sum += 1.0/i;
    return sum;
  }

  public static double euler(int n)
  {
    return harmonisk(n) - Math.log(n);
  }

  public static int fakultet(int n)
  {
    int fakultet = 1;
    for (int k = 2; k <= n; k++) fakultet *= k;
    return fakultet;
  }
}