Neden derecelerle böyle numaralar var? - sayfa 2

 
Roman :

-0.2, sıfıra bölme hatası döndürmek için sıfır değildir.

İşlev -nan değerini döndürür, yani. Bir numara değil. ve -nan ile bölmeye çalışırken hata atılır. Bu konuda, hata metni basitçe uygunsuzdur.

 

Doğru çözüm: çözüm karmaşık etki alanındadır.


Ancak pozitif ve negatif girdi parametreleri için farklı karar dallarına sahip olmaktan bahsediyorsak, önce bu dalları tanımlamanız yeterlidir:

.

Bu işlevi yapın ve her şey yoluna girecek. ;)
 
Andrey Azatskiy :

İşlev -nan değerini döndürür, yani. Bir numara değil. ve -nan ile bölmeye çalışırken hata atılır. Bu konuda, hata metni basitçe uygunsuzdur.

Öyleyse neden cehennem -0.2 -nan ? :))

Başka bir fonksiyon testi

hesap makinesinde

 1 /(- 3 ^ 3 )

- 27

mql işlevlerinde

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

- 0.03703703703703703
 
Roman :

Öyleyse neden cehennem -0.2 nan? :))

Başka bir fonksiyon testi

hesap makinesinde

mql işlevlerinde

-0.2 - nan değil, üs almanın sonucu.
Bir sayının (a^m/n) kesirli kuvveti, a^m'nin n'inci köküdür.
Radikal değer - negatif olacaksa ve m derecesine ve a sayısının kendisine göre hem negatif hem de pozitif olabilir (ki bu benim sorunumda her zaman negatiftir, bu nedenle, pozitif bir m derecesi ile, pozitiftir ve olumsuz bir - olumsuz). Yani kök değer negatifse sayı da negatiftir. Negatif bir sayının kökü - karmaşık alanda yatar ve bu nedenle, karmaşık alanın değerleri üzerinde olağan çift tip aracılığıyla işlem yapamayız ve bu nedenle, derecenin standart uygulaması - -nan üretir.

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

Doğru çözüm: Çözüm karmaşık etki alanındadır.


Ancak pozitif ve negatif girdi parametreleri için farklı karar dallarına sahip olmaktan bahsediyorsak, önce bu dalları tanımlamanız yeterlidir:

.

Bunu yap ve iyi olacaksın. ;)

Ayrıntılı cevabınız için teşekkür ederim. Ancak karmaşık hesap benim görevim için uygun değil, bu yüzden büyük olasılıkla kendimi doğal sayılarla sınırlayacağım ve sonuç olarak karmaşık alana düşmeyeceğim.

 
Andrey Azatskiy :

Ayrıntılı cevabınız için teşekkür ederim. Ancak karmaşık hesap benim görevim için uygun değil, bu yüzden büyük olasılıkla kendimi doğal sayılarla sınırlayacağım ve sonuç olarak karmaşık alana düşmeyeceğim.

Bu yüzden bundan bahsediyorum ve özellikle bir örnek gösterdim. Dikkatli bak. Bu örnek tam size göre.

not

µl'ye dönüştürmek çok kolaydır

 
Andrey Azatskiy :

-0.2 - nan değil, üs almanın sonucu.
Bir kesirli sayının (a^m/n) kuvveti, a^m'nin n'inci köküdür.
Radikal değer - negatif olacaksa ve m derecesine ve a sayısının kendisine göre hem negatif hem de pozitif olabilir (ki bu benim sorunumda her zaman negatiftir, bu nedenle, pozitif bir m derecesi ile, pozitiftir ve olumsuz bir - olumsuz). Yani kök değer negatifse sayı da negatiftir. Negatif bir sayının kökü - karmaşık alanda yatar ve bu nedenle, karmaşık alanın değerleri üzerinde olağan çift tip aracılığıyla işlem yapamayız ve bu nedenle, derecenin standart uygulaması - -nan üretir.

Andrey, evet, o böyle söylemedi, bir güce yükselmenin sonucunun -nan'a döndüğü açık.
Ancak bu sonucu üretir, tamsayının sıfır olduğu yerde kesirli bir güç -0.2
Hesap makinesi doğru.

Ve önceki test de hesap makinesindeki gibi sayılmaz.

 
Олег avtomat :

Bu yüzden bundan bahsediyorum ve özellikle bir örnek gösterdim. Dikkatli bak.

evet, her şeyi anladım. teşekkür ederim. (formül bile hazır yazılı)

 
Andrey Azatskiy :

Belki de bacaklar, negatif bir sayıdan eşit bir kök almanın imkansız olduğu gerçeğinden büyür? Zaten biraz kafam karıştı ... Ve en önemlisi, bu nasıl aşılır?

Tamsayı kuvvetleri basitçe çarpılarak (ve negatif üslerin tersini alarak) tanımlanır, böylece kolayca negatif tabanlara aktarılırlar. Kesirli kuvvetler logaritma ve üs cinsinden tanımlanır: y^x=exp(x*ln(y)) ve negatif sayılarla karmaşık düzleme gireriz. Logaritmanın sonsuz sayıda dalı vardır ve uygun bir dal bulmakla uğraşmamak için NAN döndürülür.

 
Andrey Azatskiy :

Cevabınız için teşekkür ederim, ancak genel olarak, aritmetik olarak doğru bir çözüm alırsanız, o zaman sadece karmaşık sayılarla benzer bir şey uygulamak mümkün olacak gibi görünüyor ... Önerdiğiniz yöntemde, dereceyi bölmeniz gerekiyor. kök değerinin her zaman pozitif bir dereceye sahip olduğu ve cevabın her zaman pozitif olacağıdır. Ama bu uydurma olmadan alırsak, o zaman sadece karmaşık sayılara geliriz, çünkü genel olarak kabul edilen cebirsel modele göre, bildiğim kadarıyla (eğitimden dolayı bir matematikçi değilim) - negatif bir sayının kökü karmaşık bir sayı.

yukarıda önerdiğim formülü kullanın

İşte formüle göre birer birer:

 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);
  }

ve burada çiftin kesre nasıl dönüştürüleceğine dair bir örnek

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...