import static java.lang.System.*;   //  cf. Java 5 
import static java.lang.Math.*; // cf. Java 5 
import java.text.DecimalFormat; // pour afficher avec 4 digits  après la virgule ...

/** Fichier: 'Rac4ieme.java' - Test de qq. fonctions mathématiques (de classe) de l'API t.q. 'cbrt', 'exp', 'expm1',  'log',  'log1p',  'log10', 'pow', 'sqrt' et les  fct. de  Java  1.6:  'getExponent',  'nextAfter', 'nextUp' etc ... 
 * @author   (c)~/2A env.    H. Nguyen-Phu
 * @since     1.0   12.04.2008
 * @version  1.1   13.04.2008
 */
public class Rac4ieme  {

  public static void main (String[] arg) {
  
		 DecimalFormat digits4 = new DecimalFormat( "0.0000" );
  
 		out.println("\nRac4ieme.java - 2007.04.13  17h02 / (c)~/2A env. - A ANALYSER & DEBOGUER !\n\nTest de qq. fonctions mathématiques (de classe) de l'API t.q. 'cbrt', 'exp',  'expm1', 'log10', 'log', 'log1p', 'pow', 'sqrt', 'ulp' et les fct. de  Java 1.6: 'getExponent',  'nextAfter', 'nextUp', 'scalb' etc ...\n\n");
		try  {
		double X = Double.parseDouble(es.LireCh("Donner un réel x (Ex.: 0.0001; 1e-8; 1.6e17 etc ...): "));
		double Y = racOrdre4(X);
		
		out.printf("\n\n==>  cbrt( %e )     = %e ", X,  cbrt(X));
		out.print("\n==>  cbrt( "+ digits4.format(X) + " ) =  " +  digits4.format(cbrt(X)));
		out.printf("\n==>  pow( %e, 1/3.) = %e", X,pow(X, 1/3));   //  A DEBOGUER   ICI  parmi :  1d/3  ou 1./3  ou  1/3d  ou 1./3.0   etc ...
		
		
		
		
		out.printf("\n\n==>  Rac4ieme( %e ) = %e", X, Y);
		out.printf("\n==>  pow( %e, 1./4) = %e", X,pow(X, 1/4));   //  A DEBOGUER   ICI  parmi :  1d/4  ou 1./4  ou  1/4d  etc ...
		out.printf("\n\n==>  exp( %e )   = %e", X, exp(X));
		out.printf("\n\n==>  log( %e )   = %e", X, log(X));		
		out.printf("\n\n==>  log10( %e ) = %e", X,  log10(X));
		out.printf("\n\n==>  log1p( %e ) = %e", X,  log1p(X));
		out.printf("\n==>  log(1.+ %e )= %e", X,  log(1d+ X));
		out.printf("\n\n==>  expm1( %e ) = %e", X,  expm1(X));
		out.printf("\n==>  exp( %e )-1.= %e", X,  (exp(X) - 1d));
		out.printf("\n\n==>  ulp( %e ) = %e ", X,  ulp(X));
		out.printf("\n\n==>  getExponent( %e ) = %d ", X,  getExponent(X));
		
		out.printf("\n\n==>  nextAfter( %e, %e ) = %e ", X, -10d, nextAfter(X, -10d));
		out.printf("\n==>  nextAfter( %e, %e ) = %e ", -X, -10d, nextAfter(-X, -10d));
		out.printf("\n==>  nextAfter( %e, %e ) = %e ", -Double.MIN_VALUE, 10d, nextAfter(-Double.MIN_VALUE, +10d));
		out.printf("\n==>  nextAfter( %e, %e ) = %e ", Double.MIN_VALUE, -10d, nextAfter(Double.MIN_VALUE, -10d));
				
		out.printf("\n\n==>  nextUp( %e ) = %e ", X,nextUp(X));
		out.printf("\n==>  nextUp( %e ) = %e ", -X,nextUp(-X));
		out.printf("\n==>  nextUp( %fd ) = %e ", 0d,nextUp(0d));
		out.printf("\n==>  nextUp( %ff ) = %e ", 0f,nextUp(0f));
				
		out.printf("\n\n==>  scalb( %e, -1 ) = %e ", X, scalb(X, -1));
		out.printf("\n==>  scalb(scalb( %e, -2 ), 2) = %e ", X, scalb(scalb(X, -2), 2));
		
		} catch (Exception error)  {
			out.println(error.toString());
		}
// Pour stabiliser l'écran  et afficher l'heure de fin d'exécution avant de quitter:
        es.attente();
  }

/**  racOrdre4 : Fonction de classe pour calculer la racine quatrième d'un réel double
  * @param  x  un réel double en paramètre
  * @return un réel double
  */  
  public static double racOrdre4(double x)  {  	return  sqrt(sqrt(x));  }
}

