2010-11-05 7 views
2

Pourquoi la sortie de dResult est-elle invalide?
Env: Visual Studio 2008C++ fonction pow-résultat invalide?

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    double dN = - 0.091023604111478473 ; 
    double dD = 0.127777777777777; 
    double dResult = pow(dN,dD); 
    //dResult = -1.#IND000000000000 
    return 0; 
} 
+0

Avez-vous '#include '? –

+0

Vous souvenez-vous de '#include ' ou ''? –

+0

N'utilisez pas les fonctions '_tmain' et' _TCHAR' ou '_T', sauf si vous ne savez pas si votre application aura besoin de prendre en charge Unicode. Il me semble que tout code est soit: 1) destiné à être utilisé "dans le monde réel", et doit prendre en charge unicode (utiliser 'wmain' et' WCHAR'), ou 2) le code jetable éphémère avec seulement vous comme son public dans ce cas, vous n'avez pas besoin de faire semblant. "T" est une perte d'effort. En outre, pour un code modérément complexe si vous ne le compilez pas dans les deux sens, il ne va pas compiler comme vous ne le faites habituellement pas. – sblom

Répondre

8

Voir http://www.cplusplus.com/reference/clibrary/cmath/pow/

double pow (double base, double exponent); 

« Si la base est négative et exposant n'est pas une valeur intégrale, ou si la base est égale à zéro et exposant est négatif, une erreur de domaine se produit, le réglage de la variable globale errno à la valeur EDOM "

3

Si votre valeur dD était .25 au lieu de la fraction que vous avez présenté, vous pouvez alors voir qu'il prend vraiment la quatrième racine au lieu d'une exponentielle d'un nombre négatif. Votre fraction est proche de la huitième racine. Vous avez besoin de nombres complexes pour exprimer la réponse que cette fonction devrait donner.

0

Eh bien, 0,127777777 est ce nombre? son smt aime 1277777777/(10 .... 0)

1277777777777 n'est pas un nombre pair, donc -smt à la puissance de 12777777777 est un nombre négatif, et 10 ... 0e racine de ce n'est pas un réel nombre.

Je reffering un fait que^(b/c) = (c-ième racine de) (a^b)

3

C'est le résultat attendu parce que dN est négatif. Le résultat de pow (dN, dD); n'est défini que si dN est positif ou si dD est un entier. Sinon, le résultat est un nombre complexe. Par exemple, pow (-1., 0.5) ne fonctionnera pas non plus.