Racine niéme

Signaler
Messages postés
82
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
24 octobre 2005
-
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
Salut,
je cherche à calculer la racine niéme d'un float donnée (le n est float aussi:par exemple x à la puissance 0.234).est ce qu'il y a une fonction prédefini qui réalise ce calcul?
j'ai fait un premier essai, mais ca donne pas des resultats juste;
float racinen(float n,float data)
{
float x=1;
if (data==0)return 0;
if (n==0) return 1;
else
while(n!=0)
{x=x*data;
n--;}
return x;
}
remarque:je programme en VC++.
merci pour toute suggestion.

12 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Comment veux tu que ta fonction marche...

#include <cmath>



et utilises:

double pow(double x, double n)



Ou un truc du genre, va voir dans le fichier cmath directement.
Messages postés
82
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
24 octobre 2005

quel fichier cmath?
j'ai deja utilisé la biblio #include <cmath>, le probleme , c'est que je veux calculer la racine nième de x = x puissance 1/n

avec x est float.
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Tu peux pas le faire par une recherche dichotomique avec un pourcentage de précision ? (un peu lent peut etre)



Tu incrémente ta variable x d'unités en unités. Dès que ta variable
dépasse le résultat escompté, tu incrémente d'un dixième, et ainsi de
suite.

Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

j'oubliais : tu t'arrête quand |x^n-data| Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
Messages postés
82
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
24 octobre 2005

oui c'est une bonne idée, mais il parait que c'est tres long, j'ai trouvé la fonction powf(x, 1/n) ,que croix que cette fonction est destiner pour calculer la racine niéme d'un float donné, j'ai essayer mais ca donne tjrs pas de bon résultats.
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
salut,

essaie ca:

powf(x, 1./n); // car si ca reste en entier; 1/n = 0. en reel 1./n donne bien l'inverse de n



a+
Messages postés
82
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
24 octobre 2005

maintenant ca marche tres bien, pour calculer la racine niéme d'un float donnée,j'ai utiliser powf(x, 1/n), j'ai remarqué d'apres le que le résutat obtenu que la fonction calcul la racine niéme de x avec (1/n) est entier, pour resoudre ca il faut mettre powf(x, float(1)/n).
je pense que c'etait ca le probleme
Merci pous vous tous
Messages postés
82
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
24 octobre 2005

oui ca rejoint ton idée cosmobob merci
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Et si t'aime pas les fonctions toutes faites :



x^alpha = exp(alpha*ln(x))



Biensur évité les x négatifs ;)

if(!Meilleur("Joky")) return ERREUR;
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

LOL si tu pousse jusque là prend carremment x^alpha
=((-1)^alpha)*(exp(alpha*ln(abs(x)))) o moins ca marche aussi pour les
négatifs

Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
(-1)^alpha ???

Avec alpha en décimal j'pense pas que ça marcherai sinon on aurait fait x^alpha lol :)
if(!Meilleur("Joky")) return ERREUR;<
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Mais ya une fonction toute faite pour ca dans cmath, alors pourquoi faire compliquer ?



double pow (double x, double n) qui calcul x^n. Elle est pas bien cette fonction ?


#if _GLIBCPP_HAVE_POWF

inline float

pow(float __x, float __y) { return ::powf(__x, __y); }

#else

inline float

pow(float __x, float __y)

{ return ::pow(static_cast<double>(__x), static_cast<double>(__y)); }

#endif



#if _GLIBCPP_HAVE_POWL

inline long double

pow(long double __x, long double __y) { return ::powl(__x, __y); }

#else

inline long double

pow(long double __x, long double __y)

{ return ::pow(static_cast<double>(__x), static_cast<double>(__y)); }

#endif



Il y a tout ce que l'on veut :)