なぜ、学位にそのような仕掛けがあるのでしょうか?

 

冪乗を扱う関数を書く必要があるのですが、その過程で面白いことを発見しました。

負の小数値を負のべき乗に代入すると、MQL5は-nanと書きます。

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

C++で確認したところ、同じ結果になりました(コンパイルするのが面倒で、cpp.shでテストしただけなので、言語のバージョンは不明です)。

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

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


MQL5では、プラスで同じ答えであればエラーにならないと思いますしかし、問題は、なぜそのようなことが起こるのか?計算すれば、答えは出るはずです。数学的には、負の数は1を同じ数の正の累乗で割ったものに等しい。つまりは

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

そして、コンピュータの電卓で確認する。では、この成績のトリックは何なのか?

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

冪乗を扱う関数を書く必要があるのですが、その過程で面白いことを発見しました。

負の小数値を負のべき乗に代入すると、MQL5は-nanと書きます。

C++で確認したところ、同じ結果になりました(コンパイルするのが面倒で、cpp.shでテストしただけなので、言語のバージョンは不明です)。


プラスは同じ答えを出し、MQL5ではエラーは発生しませんしかし、そのような答えになる理由は何なのでしょうか。数学を使えば、答えは出るはずだ。数学的には、負の数は1を同じ数の正の数で割ったものに等しい。 つまりは

そして、コンピュータの電卓で確認する。では、学位というのは何なのでしょうか?

Rで。

(-5.5)^-0.2=NaNとする。

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

 
Aleksey Nikolayev:

をRで表示します。

(-5.5)^-0.2=NaNとする。

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

負の数から偶数根をとることができないことから、足が伸びているのでは?もう、なんだかわけがわからなくなってきた......。そして、最も重要なのは、それを回避する方法です。

 
Andrey Azatskiy:

そして、最も重要なのは、それを回避する方法です。

m = 2

n = 10

double result = pow(pow(-5.5,2.0),-0.1); 
Print("result = ",result);                      //result = 0.7110947333604484
括弧をつけないと、マイナス記号の解釈が変わる、イミフ
 
Roman:

看板の問題が出てきます。偶数乗の根は常に正である

 
Andrey Azatskiy:

看板の問題が出てきます。偶数乗の根は常に正である。

度数が小数である電卓の場合

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

学位が分数であるmqlの場合

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

zero divide in 'Pow.mq5' 

次数が整数であるmqlにおいて。

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

-27.0

結論から言うと、この関数は小数部の累乗を正しくカウントせず、ゼロ除算を返します。

 
Igor Makanu:

m = 2

n = 10

括弧をつけないとマイナス記号の解釈は変わる

ご回答ありがとうございます。しかし、一般的に算術的に正しい解をとると、複素数でなければそのような解を実現できないようです...。提案された方法では、基となる値が常に正の次数になるように次数を分割する必要があり、答えは常に正となります。なぜなら、私の知る限り(私は数学者ではない)、一般に受け入れられている代数学モデルによれば、負の数の根は複素数になるのだから。

 
Roman:

mqlの場合、分数次数はどこですか?

学位が分数であるmqlの場合

次数が整数であるmqlにおいて。

結論から言うと、この関数は小数点を正しくカウントせず、ゼロ除算を返します。

機能は正しいです。標準的な計算ではうまくいきません)

 
もし私が誤解していたら訂正してほしいのですが、結局のところ、複素数の外にも解があるのでしょうか?
 
Andrey Azatskiy:

機能は正しいです。標準的な数学はそこに当てはまらない)

-0.2 はゼロによる除算 エラーを返すためにゼロではありません。

理由: