Opération avec log10(), résultat innatendu

VaN
Mammouth du PHP | 1107 Messages

21 janv. 2009, 12:52

Bonjour,

Voici le résultat que m'affiche mon opération, à base de log10() :
-1.#IND
Et voici l'operation :
function calculNbMensualites ($montantEmprunt, $mensualites, $taux) {
	$var1 = (($montantEmprunt * $taux / 12) / $mensualites) - 1;
	$var2 = 1 + ($taux / 12);
	$nbMensualites = log10($var1) / log10($var2);
	return $nbMensualites;
}
Je l'ai décomposé en variables intermédiaires, pour ne pas me prendre les pattes dans les parenthèses.

L'équation de départ est la suivante :
D = A * (B/12) / (1 - (1 + B/12)^-C)
Mon but était d'isoler C. j'en suis arrivé à :
C = log((A * B/12 / D) -1) / log(1 + B/12)
grâce à l'égalité
log X^n = n log X
A priori, je n'ai pas fait d'erreur de frappe, ni d'erreur de logique, alors j'aimerai savoir pourquoi PHP me sort ce résultat incompréhensible, qui doit être dû à une erreur.

Je précise de suite que dans mes formule mathématiques, j'écris log, qui en PHP est log10() (logarithme base 10, et non logarithme népérien, ou naturel).

Amis matheux, j'attends vos remarques : )

ViPHP
ViPHP | 1996 Messages

21 janv. 2009, 22:32

En décomposant je trouve :

Code : Tout sélectionner

D = A * (B/12) / (1 - (1 + B/12)^-C) D x 12 1 -------- = ------------------ A x B 1 - (1 + B/12)^-C A x B -------- = 1 - (1 + B/12) ^-C D x 12 A x B --------- - 1 = - (1 + B/12) ^-C D x 12 A x B 1 - --------- = (1 + B/12) ^-C D x 12 log ( 1 - (AxB/Dx12)) = -C x log (1 + B/12) log (1-(AxB/Dx12)) - ------------------------ = C log (1 + B/12)
Et tu as écris
C = log((A * B/12 / D) -1) / log(1 + B/12)
Est ce que je me trompe ? (mes cours de maths remonte à loin...)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

VaN
Mammouth du PHP | 1107 Messages

22 janv. 2009, 13:39

Après test, le résultat est le même : -1.#IND

ViPHP
ViPHP | 1996 Messages

24 janv. 2009, 12:06

Après quelques recherches : http://www.w3schools.com/php/func_math_log10.asp

Visiblement selon log10(x), si le résultat est "-1.#IND", x est négatif.
Peut être une erreur dans la formule ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr