double n = -1/MathPow(5.5, 0.2); Print(n);
冪乗を扱う関数を書く必要があるのですが、その過程で面白いことを発見しました。
負の小数値を負のべき乗に代入すると、MQL5は-nanと書きます。
C++で確認したところ、同じ結果になりました(コンパイルするのが面倒で、cpp.shでテストしただけなので、言語のバージョンは不明です)。
プラスは同じ答えを出し、MQL5ではエラーは発生しませんしかし、そのような答えになる理由は何なのでしょうか。数学を使えば、答えは出るはずだ。数学的には、負の数は1を同じ数の正の数で割ったものに等しい。 つまりは
そして、コンピュータの電卓で確認する。では、学位というのは何なのでしょうか?
Rで。
(-5.5)^-0.2=NaNとする。
-5.5^-0.2=-(5.5^-0.2)=-0.7110947
をRで表示します。
(-5.5)^-0.2=NaNとする。
-5.5^-0.2=-(5.5^-0.2)=-0.7110947
負の数から偶数根をとることができないことから、足が伸びているのでは?もう、なんだかわけがわからなくなってきた......。そして、最も重要なのは、それを回避する方法です。
そして、最も重要なのは、それを回避する方法です。
m = 2
n = 10
double result = pow(pow(-5.5,2.0),-0.1); Print("result = ",result); //result = 0.7110947333604484括弧をつけないと、マイナス記号の解釈が変わる、イミフ
看板の問題が出てきます。偶数乗の根は常に正である
看板の問題が出てきます。偶数乗の根は常に正である。
度数が小数である電卓の場合
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
結論から言うと、この関数は小数部の累乗を正しくカウントせず、ゼロ除算を返します。
m = 2
n = 10
括弧をつけないとマイナス記号の解釈は変わるご回答ありがとうございます。しかし、一般的に算術的に正しい解をとると、複素数でなければそのような解を実現できないようです...。提案された方法では、基となる値が常に正の次数になるように次数を分割する必要があり、答えは常に正となります。なぜなら、私の知る限り(私は数学者ではない)、一般に受け入れられている代数学モデルによれば、負の数の根は複素数になるのだから。
mqlの場合、分数次数はどこですか?
学位が分数であるmqlの場合
次数が整数であるmqlにおいて。
結論から言うと、この関数は小数点を正しくカウントせず、ゼロ除算を返します。
機能は正しいです。標準的な計算ではうまくいきません)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
冪乗を扱う関数を書く必要があるのですが、その過程で面白いことを発見しました。
負の小数値を負のべき乗に代入すると、MQL5は-nanと書きます。
C++で確認したところ、同じ結果になりました(コンパイルするのが面倒で、cpp.shでテストしただけなので、言語のバージョンは不明です)。
MQL5では、プラスで同じ答えであればエラーにならないと思いますしかし、問題は、なぜそのようなことが起こるのか?計算すれば、答えは出るはずです。数学的には、負の数は1を同じ数の正の累乗で割ったものに等しい。つまりは
そして、コンピュータの電卓で確認する。では、この成績のトリックは何なのか?