/* Test de precision sur les float                  */

public class TestPrecisionFloat {

//////////////////////////////////////////////////////

  /* Test de precision sur les float                */

  public static void main(String [] args) {
    /* Travail sur des float (simple precision)     */
    float v;
    /* Stockage de la valeur 1.0                    */
    /* -> Pas de perte de precision                 */
    /* -> Pas de probleme                           */
    v = 1.0F;
    Ecran.formater("%22.20f\n\n",v);
    /* Stockage de la valeur 1.0e-08                */
    /* -> Perte de precision sur le stockage        */
    /* -> Probleme                                  */
    v = 1.0e-8F;
    Ecran.formater("%22.20f\n\n",v);
    /* Ajout a 1.0 de la valeur 1.0e-8              */
    /* "Disparition" de la valeur ajoutee           */
    /* -> Perte de precision sur le stockage        */
    /* -> Probleme                                  */
    v = 1.0F + 1.0e-8F;
    Ecran.formater("%22.20f\n",v);
    Ecran.formater("%22.20f\n\n",1.00000001F);
    /* Ajout a 1.0 de la valeur 1.0e-7              */
    /* Perte de precision sur le stockage           */
    /* -> Probleme                                  */
    v = 1.0F + 1.0e-7F;
    Ecran.formater("%22.20f\n",v);
    Ecran.formater("%22.20f\n\n",1.0000001F);
    /* Execution d'une operation mathematique       */
    /* sur une valeur entachee d'une erreur         */
    /* de stockage                                  */
    /* Perte de precision avec accumulation         */
    /* -> Probleme                                  */
    v = (1.0F + 1.0e-7F)*4.0F;
    Ecran.formater("%22.20f\n",v);
    Ecran.formater("%22.20f\n\n",4.0000004F);
    /* Stockage de la valeur 0.3e10 float           */
    /* Pas de perte de precision                    */
    /* -> Pas de probleme                           */
    v = 0.3e10F;
    Ecran.formater("%22.20f\n\n",v);
    /* Multiplication de 0.3e10 float               */
    /* par 0.3e10 float                             */
    /* Erreur de calcul et/ou perte de precision    */
    /* -> Probleme                                  */
    v = 0.3e10F*0.3e10F;
    Ecran.formater("%22.20f\n",v);
    Ecran.formater("%22.20f\n\n",0.9e19F);
    /* Depassement de capacite                      */
    /* -> Probleme                                  */
    v = 0.3e10F*0.3e10F*0.3e10F*0.3e10F*0.3e10F;
    Ecran.formater("%22.20f\n\n",v);
  }

//////////////////////////////////////////////////////
}