Calculer la racine cubique d'un nombre [Résolu]

Messages postés
25
Date d'inscription
samedi 8 décembre 2007
Dernière intervention
16 mars 2010
- 21 déc. 2009 à 14:11 - Dernière réponse :
Messages postés
25
Date d'inscription
samedi 8 décembre 2007
Dernière intervention
16 mars 2010
- 22 déc. 2009 à 14:52
Bonjour,
j'aimerais calculer la racine cubique d'un nombre (+ ou -) par méthode dichotomique, j'ai trouvé ce code: delphi.fr
Mais voilà je n'arrive pas à le transposer en PHP...
Exemple:
Dans le code delphi, il fait (l'auteur):
bornMil:=(bornInf+bornSup)/2;
->sans initialiser les variables, ok, mais en PHP ca ne marche pas comme ca!

En PHP, il me sort des réponses fausses... alors qu'avec ce code en delphi ca marche parfaitement!

Quelqu'un pourrait éclairer ma lanterne?
Merci!
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Dernière intervention
11 mars 2013
- 22 déc. 2009 à 12:21
3
Merci
si jamais, je viens de me rendre compte d'une erreur dans mon code...

il faut remplacer
<?php
if(pow($min,3)*pow($milieu,3)<0)
?>

par
<?php
if((pow($min,3)-$x)*(pow($milieu,3)-$x)<0)
?>


Pour ce qui est des variables dans le code delphi, elles ne sont pas initialisées en ligne 72, mais le sont juste plus bas. Il part du principe (qui est vrai pour tout nombre dont la valeur absolue est >=1 que la valeur absolue du nombre est toujours plus grande en valeur absolue que sa racine cubique, d'où les lignes que je t'ai citées.

Merci JulSoft 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de JulSoft
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Dernière intervention
11 mars 2013
- 21 déc. 2009 à 19:02
0
Merci
Il y'a bien initialisation des variables, juste un peu plus haut...
  if (nombre>0) then
 begin
  bornInf:=0;
  bornSup:=nombre;
 end
 else begin
  bornInf:=nombre;
  bornSup:=0;
 end; 


en php, la methode de dichotomie pour uen racine cubique peut s'écrire comme ça:
<?php
function racineCubique($x,$min=0,$max=0,$ecart=1e-10){
 if($min==$max && $x<0){
  $min=$x;
  $max=0;
 }elseif($min==$max && $x>0){
  $min=0;
  $max=$x;
 }
 while($max-$min>$ecart){
  $milieu=($min+$max)/2;
  if(pow($min,3)*pow($milieu,3)<0){ // changement de signe entre min et milieu
   $max=$milieu
  }else{
   $min=$milieu;
  }
 }
 return ($max-$min)/2;
}
?>


J'ai écrit ça complettement à l'arrache sans test... Il se peut que ça fonctionne, mais c'est pas certain... Toutefois, je pense que l'idée générale y est.
Commenter la réponse de JulSoft
Messages postés
25
Date d'inscription
samedi 8 décembre 2007
Dernière intervention
16 mars 2010
- 22 déc. 2009 à 10:25
0
Merci
Salut!
Merci de ta réponse je vais essayer ca et je te tient au courant!
Quant aux variables, à la ligne 72 du code delphi, elle ne sont pas initialisé! Si?

Merci @ plus...
Commenter la réponse de cs_mikevkb
Messages postés
25
Date d'inscription
samedi 8 décembre 2007
Dernière intervention
16 mars 2010
- 22 déc. 2009 à 14:52
0
Merci
Pffiou!
J'ai bien cru que j'allais péter mon clavier en 2!
Alors, voilà:
if((pow($min,3)-$x)*(pow($milieu,3)-$x)<0)
=> c'est la bonne condition, mais le résultat était un truc du genre: 4.959562E-11!
J'ai un peu bricoler, et finalement j'ai trouvé:
il faut remplacer
return ($max-$min)/2;

par:
 return $milieu;


Voili Voilou...

Grand (grand) merci!
PS: Je ne comprends tjrs pas pourquoi la "transposition" delphi->PHP ne marche pas...
Pourtant j'ai gardé la même logique, même opération, etc...
Commenter la réponse de cs_mikevkb

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.