racine n-ième ?

Eléphant du PHP | 59 Messages

01 janv. 2006, 21:21

bonjour tlm,

simple question de base: comment on fait en php pour faire la racine n-ième d'un nombre ?

Par exemple comment faire la racine quatrième de 81 (qui donne 3) ?
Donc ici le contraire de 3 exposant 4... *-)

Merci
Pierre

Mammouth du PHP | 19672 Messages

01 janv. 2006, 21:33

Il faudrait fouiller dans les fonctions mathématiques de PHP et éventuellement dans les classes PEAR dédiées aux calculs mathématiques pour trouver ton bonheur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

01 janv. 2006, 23:50

Rappel mathématique :
Une racine n-ième de X s'écrit X^(1/n)
La racine quatrième de 81 (qui donne 3) peut s'écrire : 81^(1/4) ;)

Eléphant du PHP | 59 Messages

02 janv. 2006, 01:06

merci pour cette info :) très utile :p

donc un bcpow(81,(1/4)) fait l'affaire alors ?

Et sinon, j'ai un ptit problème avec le preg_replace, justement à propos de ça:
je voudrais, à partir par exemple d'un $str = '4^3'; obtenir un $str2 = 'bcpow(4,3)'; ...

Je cale dans la fonction preg_replace, pour mettre plusieurs expressions. J'ai essayé preg_replace("([0-9]*)\^([0-9]*)","bcpow($0,$1)",$str); mais marche pas, j'ai du me planter quelque part... J'ai essayé idem avec $1 et $2 , et idem avec \\0 \\1 et \\2 , rien ne va. Je pense que c'est dans le premier argument que j'ai un problème, pas dans le deuxième...

Une idée ?

Merci !
++
Pierre

Eléphant du PHP | 59 Messages

27 janv. 2006, 00:25

allô ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 janv. 2006, 01:10

allô ?
à l'huile :lol:

je ne suis pas un expert en expressions régulières mais ceci fonctionne:
$str='4^3';
$str=preg_replace('#(\d+)\^(\d+)#','bcpow($1,$2)',$str);
echo $str;
après ça reste une chaine et non plus une fonction.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 383 Messages

27 janv. 2006, 12:14

tu peux aussi t'amuser a implementer la methode de newton pour calculer des valeurs approches des racines :-) c'est bourrin, mais rigolo.... en caclculant plusieurs iterations de la suit :
pour la racine k-ieme de a

Code : Tout sélectionner

x(n+1)=(a/(x(n)^(k-1))+x(n))/2
ou un truc du genre...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 janv. 2006, 13:32

Voici une formule mathématique pour calculer les puissance et les racines.

On sait que :
x² peut s'écrire sous forme exponentielle : exp (2 * log(x) )

Alors généralisons :
  • Puissance n° de x s'écrit: x ^ n = exp( n * log(x) )
    Racine n° de x s'écrit: x ^1/n = exp( log(x) / n )
Et en voici le programme PHP
<?php
//Données à calculer
$x = 27;
$n = 3; 

//Fonction n° écrite sous forme logique
$str = "$x^1/$n"; 

//Pour calculer la racine n° vaut mieu utiliser la forme exponentielle
//x ^1/n = exp( log(x) / n )
echo "<p>$str = ".exp(log($x)/$n);
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 59 Messages

29 janv. 2006, 21:06

hmm, ok, donc mon pb est purement l'expression régulière...

Je vais tester la proposition de Truc :)
Merci !
Ciao. Pierre

Eléphant du PHP | 59 Messages

30 janv. 2006, 00:34

hmm, mouais ça a l'air d'aller... :)

Et il se passe quoi si il existe plusieurs "^" dans la chaine ?

En fait ça marche très bien avec un, mais à partir du moment où il y en a plus d'un, il ne change plus rien :s

Une idée ?

Merci !
Ciao
Pierre