Pourquoi y a-t-il de telles astuces avec les diplômes ?

 

Je dois écrire une fonction qui fonctionne avec les pouvoirs et, ce faisant, j'ai découvert quelque chose d'intéressant :

Si je substitue un nombre fractionnaire négatif à une puissance fractionnaire négative, MQL5 écrit -nan.

double n = MathPow(-5.5,-0.2);

Je l'ai vérifié en C++ et j'ai obtenu le même résultat (je ne sais pas quelle version du langage a été utilisée, car j'étais trop paresseux pour compiler et je l'ai juste testé par cpp.sh).

#include <iostream>
#include <string>
#include <tgmath.h>

int main()
{
    double _pow = pow(-5.5,-0.2);    
  
  std::cout << _pow << "\n";
}


Je pense qu'il n'y a pas d'erreur dans MQL5 si la réponse est la même en plus ! Mais la question est de savoir pourquoi cela se passe ainsi. Si nous faisons les calculs, la réponse devrait être là. Mathématiquement, un nombre négatif est égal à un divisé par le même nombre à la puissance positive. En d'autres termes :

-5.5^-0.2 = 1/(-5.5^0.2) = −0,711094733;

Et la calculatrice de l'ordinateur le confirme. Alors, c'est quoi ce truc avec les notes ?

 
double n = -1/MathPow(5.5, 0.2);
Print(n);
 
Andrey Azatskiy:

Je dois écrire une fonction qui fonctionne avec les pouvoirs et, ce faisant, j'ai découvert quelque chose d'intéressant :

Si je substitue un nombre fractionnaire négatif à une puissance fractionnaire négative, MQL5 écrit -nan.

Je l'ai vérifié en C++ et j'ai obtenu le même résultat (je ne sais pas quelle version du langage a été utilisée, car j'étais trop paresseux pour compiler et je l'ai juste testé par cpp.sh).


Les plus donnent la même réponse, il n'y a pas d'erreur dans MQL5 ! Mais quelle est la raison d'une telle réponse ? Si nous utilisons les mathématiques, la réponse devrait être donnée. Mathématiquement, un nombre à la puissance négative est égal à un divisé par le même nombre à la puissance positive. En d'autres termes :

Et la calculatrice de l'ordinateur le confirme. Alors c'est quoi ce truc avec les diplômes ?

En R :

(-5,5)^-0,2=NaN

-5.5^-0.2=-(5.5^-0.2)=-0.7110947

 
Aleksey Nikolayev:

en R :

(-5,5)^-0,2=NaN

-5.5^-0.2=-(5.5^-0.2)=-0.7110947

Peut-être que les jambes se développent à partir du fait que l'on ne peut pas prendre une racine paire à partir d'un nombre négatif ? Je suis déjà un peu perdue... Et surtout, comment le contourner ?

 
Andrey Azatskiy:

Et surtout, comment le contourner ?

m = 2

n = 10

double result = pow(pow(-5.5,2.0),-0.1); 
Print("result = ",result);                      //result = 0.7110947333604484
sans parenthèses, le signe moins peut être interprété différemment, imho
 
Roman:

Il y aura un problème avec les panneaux. La racine d'une puissance paire est toujours positive

 
Andrey Azatskiy:

Il y aura un problème avec les panneaux. La racine d'une puissance paire est toujours positive.

Dans les calculatrices où le degré est fractionné

1/(-5.5 ^ -0.2)
-0,7110947333604484236326007791589

En mql où le diplôme est fractionné

double n = 1/MathPow(-5.5, -0.2);
Print(n);

zero divide in 'Pow.mq5' 

Dans mql où le degré est entier.

double n = 1/MathPow(-3.0, -3.0);
Print(n);

-27.0

Conclusion, la fonction ne compte pas correctement les puissances fractionnaires, et renvoie une division nulle.

 
Igor Makanu:

m = 2

n = 10

sans parenthèses le signe moins peut être interprété différemment, imho

Merci pour la réponse, mais en général, si l'on prend une solution arithmétiquement correcte, il semble que seuls les nombres complexes puissent être utilisés pour mettre en oeuvre une telle solution... Dans la méthode que vous proposez, il est nécessaire de diviser le degré pour que la valeur sous-jacente ait toujours un degré positif et que la réponse soit toujours positive. Mais si l'on se passe de cet ajustement - nous n'arrivons qu'aux nombres complexes, car selon le modèle algébrique généralement accepté, pour autant que je sache (je ne suis pas mathématicien de formation) - la racine d'un nombre négatif sera un nombre complexe.

 
Roman:

Dans mql où est le degré fractionnel

En mql où le diplôme est fractionné

Dans mql où le degré est entier.

Conclusion, la fonction ne compte pas correctement les degrés fractionnaires, et renvoie une division nulle.

La fonction est correcte. Le calcul standard ne fonctionne pas dans ce cas).

 
Corrigez-moi si je me trompe, peut-être existe-t-il une solution en dehors des nombres complexes après tout ?
 
Andrey Azatskiy:

La fonction est correcte. Les mathématiques standard ne s'y prêtent pas).

-0,2 n'est pas égal à zéro pour renvoyer une erreur de division par zéro.