package ch.epfl.isochrone.math;
import static java.lang.Math.*;
/**
 * Methodes mathématiques servant a l'ensemble du projet. 
 * 
 * @author Charles Thiebaut (238935) 
 * @author Arnaud Delamare (234841)
 *
 */
public final class Math{
    
    private Math(){}
    /**    
     * @return l'arcsin de la valeur passé en argument. 
     */    
    public static double asinh(double x)
    {
        return log(x + sqrt(1 + x*x));
    }
    
    /**    
     * @return haversin de la valeur passé en argument. 
     */    
    public static double haversin(double x)
    {
        return pow(sin(x/2), 2);
    }
    
    /**    
     * @return le quotient de la division par défaut des valeurs passé en argument. 
     */    
    public static int divF(int n, int d)
    {
      if(d == 0)
      {
          throw new IllegalArgumentException();
      }
      
      int i; 
      int Qt = n/d;
      int Rt = n%d;  
      if(signum(Rt) == -signum(d))
      {
          i = 1;
      }else
      { 
          i = 0;
      } 
      
   
      return (Qt - i);  
    }
    
    /**    
     * @return le modulo des valeurs passé en argument. 
     */    
    public static int modF(int n, int d)
    {
        int Rt = n%d;
        int i; 
        if(signum(Rt) == -signum(d))
        {
            i = 1;
        }else
        { 
            i = 0;
        } 
        
        return Rt + i*d;       
    }
}
