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

 
Roman:

-0.2がゼロでないため、ゼロによる除算 エラーを返します。

この関数は-nan、つまりNot a Numberを返すので、-nanで割ろうとするとエラーが発生します。どちらかというと、エラー文が適切でないだけです。

 

正解: 解は複素数領域にある。


しかし、正の入力パラメータと負の入力パラメータに対して異なる解の分岐を持たせるということであれば、まずこれらの分岐を定義すればよいのです。

.

そんな機能を作れば大丈夫です(笑)
 
Andrey Azatskiy:

この関数は-nan、すなわちNot a Numberを返すので、-nanで割ろうとするとエラーが発生します。どちらかというと、エラー文が適切でないだけです。

いったいなぜ、-0.2が-nanになるのでしょうか?)

もう一つのテスト機能

電卓で。

1/(-3 ^ 3)

-27

mqlの関数で

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

-0.03703703703703703
 
Roman:

では、なぜ-0.2がナンなのかというと...)

もうひとつのテスト機能

電卓で

mql関数の中で。

は-0.2~ナンではなく、1度上がった結果です。
ある数(a^m/n)の分数次数は、a^mの次数nのルートです。
副根の値が負の場合、mのべき乗と数aそのもの(私の問題では常に負なので、mのべき乗が正の場合は正、負の場合は負となる)から、負にも正にもなりうる。つまり、サブルートの値がマイナスであれば、数値もマイナスになるわけです。負の数の根は複素数領域にあるので、通常のdouble型では 複素数領域の値を操作することができず、そのため次数の標準的な実装では-nanとなります。

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...
 
Олег avtomat:

正解:解は複素数領域にある。


しかし、正の入力パラメータと負の入力パラメータに対して異なる解の分岐を持たせるということであれば、最初にこれらの分岐を定義すればよいのです。

.

そのような機能を作れば、すべてうまくいくでしょう ;)

詳しいご回答をありがとうございました。しかし、私の場合、複素数計算は私の問題には適さないので、自然数に限定し、結果として複素数領域に入らないようにする可能性が高いです。

 
Andrey Azatskiy:

詳細なご回答をありがとうございました。ただ、私の場合、複素数計算は私の問題には向かないので、自然数に限定して、結果的に複素数領域に陥らないようにするのでしょう。

そういうことで、具体的に例を示しました。よく見てください。この例は、まさにあなたのケースに当てはまります。

ザイ

µlへの変換は非常に簡単です

 
Andrey Azatskiy:

は、-0.2~ナンではなく、度外視した結果です。
分数(a^m/n)のべき乗は、a^mの次数nの根である。
副根の値が負の場合、mのべき乗と数aそのもの(私の問題では常に負なので、mの正のべき乗で正、負のべき乗で負となる)を基準に、負にも正にもなることができる。つまり、サブルートの値がマイナスであれば、数値もマイナスになるわけです。負の数の根は複素数領域にあるので、通常のdouble型では 複素数領域の値を操作することができず、そのため次数の標準的な実装では-nanとなります。

アンドレイ そうなんだ、失言だったね。
しかし、この結果は、整数がゼロになる分数乗を生じさせます -0.2
電卓はすべてを正しく計算します。

そして、前回のテストも、電卓のようにカウントされない。

 
Олег avtomat:

そういうことで、具体的に例を挙げました。よく見てください。

はい、わかりました、ありがとうございます。(式まで書いてある)

 
Andrey Azatskiy:

負の数から偶数根をとることができないという事実から、足が生えているのでしょうか。もう、わけがわからなくなってきました...。そして、最も重要なのは、それを回避する方法です。

整数度は単純に掛け算で決まるので(負の指数には逆数をとる)、負の基数への移行は容易である。分数次数は対数と指数で定義され、y^x=exp(x*ln(y))で、負数では複素数平面上に来ることになります。対数には無限の分岐があり、正しい分岐を探す手間を省くために、NANを返しているのです。

 
Andrey Azatskiy:

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

は、上で提案した計算式を使ってください。

以下は同じ計算式です。

void OnStart()
  {
   int m = 2;
   int n = 10;
   
   double result = 1.0/pow(pow(-5.5,m),1.0/n); 		// result = 0.7110947333604484
   Print("result = ",result);
  }

で、以下は、double を分数に変換する例です。

https://www.mql5.com/ru/forum/290279#comment_9396706

Число в дробь (convert double to fraction)
Число в дробь (convert double to fraction)
  • 2018.11.16
  • www.mql5.com
Ищу способ преобразовать вещественное число в дробь, нагуглил исходник https://stackoverflow...