Class RootsOfUnity

  • All Implemented Interfaces:
    java.io.Serializable

    public class RootsOfUnity
    extends java.lang.Object
    implements java.io.Serializable
    A helper class for the computation and caching of the n-th roots of unity.
    Since:
    3.0
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      RootsOfUnity()
      Build an engine for computing the n-th roots of unity.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void computeRoots​(int n)
      Computes the n-th roots of unity.
      double getImaginary​(int k)
      Get the imaginary part of the k-th n-th root of unity.
      int getNumberOfRoots()
      Returns the number of roots of unity currently stored.
      double getReal​(int k)
      Get the real part of the k-th n-th root of unity.
      boolean isCounterClockWise()
      Returns true if computeRoots(int) was called with a positive value of its argument n.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • RootsOfUnity

        public RootsOfUnity()
        Build an engine for computing the n-th roots of unity.
    • Method Detail

      • isCounterClockWise

        public boolean isCounterClockWise()
                                   throws MathIllegalStateException
        Returns true if computeRoots(int) was called with a positive value of its argument n. If true, then counter-clockwise ordering of the roots of unity should be used.
        Returns:
        true if the roots of unity are stored in counter-clockwise order
        Throws:
        MathIllegalStateException - if no roots of unity have been computed yet
      • computeRoots

        public void computeRoots​(int n)
                          throws ZeroException

        Computes the n-th roots of unity. The roots are stored in omega[], such that omega[k] = w ^ k, where k = 0, ..., n - 1, w = exp(2 * pi * i / n) and i = sqrt(-1).

        Note that n can be positive of negative

        • abs(n) is always the number of roots of unity.
        • If n > 0, then the roots are stored in counter-clockwise order.
        • If n < 0, then the roots are stored in clockwise order.

        Parameters:
        n - the (signed) number of roots of unity to be computed
        Throws:
        ZeroException - if n = 0
      • getNumberOfRoots

        public int getNumberOfRoots()
        Returns the number of roots of unity currently stored. If computeRoots(int) was called with n, then this method returns abs(n). If no roots of unity have been computed yet, this method returns 0.
        Returns:
        the number of roots of unity currently stored