2016-05-17 1 views

Répondre

3

pow pour les arguments en virgule flottante est probablement mis en œuvre comme exp (y log x) (ce qui est, par ailleurs, remarquablement intelligent depuis log et exp en particulier peut être évaluée très rapidement sur les chipsets modernes). Clairement cela ne fonctionne pas pour non-positif, d'où votre sortie.

La norme spécifie que pow est défini uniquement pour un x positif si x et y sont en virgule flottante. http://en.cppreference.com/w/cpp/numeric/math/pow est une bonne référence.

+0

Merci. J'ai essayé d'exp (y ln x) mais j'ai échoué. parce que ln (-0.7) retourné indique une erreur de domaine. Selon la référence écrite dans pow (-1, ± ∞). ± ∞ signifie n'importe quel nombre ?? même décimal ?? – user1320165

+0

Vous comprenez que -0.726354 élevé à 0.954 n'a pas de vraie solution? (Plutôt une famille de nombres complexes)? – Bathsheba

+0

Je l'ai résolu se référer à la réponse supérieure. Je vous remercie. – user1320165

5

Les puissances des nombres négatifs avec un exposant non entier sont généralement des nombres complexes. La fonction pow renvoie un double qui est une approximation d'un nombre réel. Par conséquent, cela ne peut pas fonctionner.

Si vous ne souhaitez que la valeur absolue, vous pouvez réécrire comme:

x^y = (-x)^y * (-1)^y

Vous pouvez calculer la gauche terme en utilisant pow car -x est positif. Par ailleurs, la fonction pow ne renvoie pas une valeur "infinity" mais une valeur indiquant une erreur de domaine. Par conséquent, la fonction pow ne renvoie pas une valeur "infinity".

+0

Premier. Merci pour Corret pour moi. Je vais trouver à propos de indique une erreur de domaine. et est cette équation ((-1)^y) Toujours retourner 1 ??? – user1320165

+0

@ user1320165: La valeur de (-1)^y n'est pas vraiment 1 mais un nombre complexe avec une valeur absolue de 1. Dans le plan complexe, ce sont des valeurs sur le cercle unité. –

+0

Selon votre réponse. 1 est une valeur approximative. Je comprends bien. Je vous remercie. – user1320165