Trouver la racine carrée et la racine cubique d'un nombre avec plus de précision (choix du nombre de chiffres apres la virgu

Description

En effet Racine_carree.h contient la fonction nommée racine(double,int) mais également la fonction racine_cub(double,int).

Pour fonctionner cette fonction (racine()) necessite le nombre au carré et le nombre de chiffres qu'il faut apres la virgule. Cette fonction permet une plus grande precision que sqrt(). Un test comparatif opposant ces deux fonctions est exposé à la fin de l'éxécution du programme (disponible dans le zip) : il expose premierement le resultat trouvé avec racine() puis celui trouvé avec sqrt(). Le résultat obtenu par l'execution de cette fonction est un string contenant la valeur de la racine carrée du nombre désiré.

Pour fonctionner cette fonction (racine_cub()) necessite le nombre au cube et le nombre de chiffres qu'il faut apres la virgule. Le résultat obtenu par l'execution de cette fonction est un string contenant la valeur de la racine cubique du nombre désiré.

Source / Exemple :


#ifndef RACINE_CARREE_H
#define RACINE_CARREE_H

using namespace std;

string int_to_char(int nb) {
       char nombre[16];
       itoa(nb,nombre,10);
       string texte(nombre);
       return texte;
}

string racine(double nb_carre,int w) {
       w++;
       string renvoi;
       if(nb_carre<0) {
                renvoi="ERREUR : Un carre est forcement positif";
                w=-1;
       }
       double precision(1);
       double dernier(0);
       for(int i(0);i<w;i++) {
               for(int j(0);j>=0;j++) {
                          if((j*precision+dernier)*(j*precision+dernier)==nb_carre) {
                                   i=w;
                                   dernier+=j*precision;
                                   renvoi+=int_to_char(j);
                                   j=-100;
                          }
                          if((j*precision+dernier)*(j*precision+dernier)>nb_carre) {
                                   if(j-1<0) i=w;
                                   else {
                                        dernier+=j*precision-precision;
                                        renvoi+=int_to_char(j-1);
                                        j=-100;
                                   }
                          }
               }
               if(i==0) renvoi+=",";
               precision=precision/10;
       }
       return renvoi;
}

string racine_cub(double nb_carre,int w) {
       w++;
       string renvoi;
       if(nb_carre<0) {
                renvoi="ERREUR : Un carre est forcement positif";
                w=-1;
       }
       double precision(1);
       double dernier(0);
       for(int i(0);i<w;i++) {
               for(int j(0);j>=0;j++) {
                          if((j*precision+dernier)*(j*precision+dernier)*(j*precision+dernier)==nb_carre) {
                                   i=w;
                                   dernier+=j*precision;
                                   renvoi+=int_to_char(j);
                                   j=-100;
                          }
                          if((j*precision+dernier)*(j*precision+dernier)*(j*precision+dernier)>nb_carre) {
                                   if(j-1<0) i=w;
                                   else {
                                        dernier+=j*precision-precision;
                                        renvoi+=int_to_char(j-1);
                                        j=-100;
                                   }
                          }
               }
               if(i==0) renvoi+=",";
               precision=precision/10;
       }
       return renvoi;
}

#endif

// Un executable exploitant cette fonction
// est disponible dans le zip :
// Racine carree.ex_ qu'il faut renommé Racine carree.exe

Conclusion :


:'(

Petit problème,
lors de l'utilisation de nombre décimaux tels que 0.09 ou 0.027,
le programme renvoi des valeurs proches de la réalité mais non exactes.

Exemple :
Si l'on met 0.09 pour le nombre au carré,
le programme renvoi 0.2999... à la place de 0.3.
Si l'on met 0.027 pour le nombre au cube,
le programme renvoi 0.2999... à la place de 0.3.

Besoin d'aide :
Si quelqu'un sait comment résoudre ce problème merci de me le communiquer au plus vite en commentaire de cette source.

Merci d'avance...

;) A bientôt! ;)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.