- Помощь в кодировании
- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
- Проверка на значение
Добрый день, возникла проблема mql4 не правильно расчитывает формулу :
Ну, например:
(MathPow(2.71,INT_MIN)==0.0)==truedouble - это 64 бита записанных по стандарту IEEE 754 и получить там 0.0 при вычислениях, ни разу не сложно. Математика вообще и математика, применимая к числам с плавающей точкой в представлении "железки" - это несколько разные виды математики))). Вместо INT_MIN, -1000 - вполне достаточно)))
Ну, например:
double - это 64 бита записанных по стандарту IEEE 754 и получить там 0.0 при вычислениях, ни разу не сложно. Математика вообще и математика, применимая к числам с плавающей точкой в представлении "железки" - это несколько разные виды математики))). Вместо INT_MIN, -1000 - вполне достаточно)))Out=1/(1+1/(MathPow(2.71,x)));
да но вот тут:
(MathPow(2.71,INT_MIN)==0.0)==true
в какую степень возведется число 2.71?
По факту можно изменить вот эту часть
1/(MathPow(2.71,x)) на exp(-x)
но и так при выполнении дает деление на ноль.
Извиняюсь) вчера с телефона писал))), там вот какая формула:
да но вот тут:
в какую степень возведется число 2.71?
По факту можно изменить вот эту часть
но и так при выполнении дает деление на ноль.
код как он есть, весь, методом copy-paste приведите пожалуйста. Чтобы точно не было опечаток и zero-divide был именно в указанном месте и можно было проверить.
Везде, где в коде есть деление, лучше всего ввести переменную, равную значению знаменателя. Перед выполнением деления проверить значение переменной на 0. Это гораздо проще (и дисциплинированнее), чем потом мучиться в поисках ошибки.
Или вопрос чисто академический?
Везде, где в коде есть деление, лучше всего ввести переменную, равную значению знаменателя. Перед выполнением деления проверить значение переменной на 0. Это гораздо проще (и дисциплинированнее), чем потом мучиться в поисках ошибки.
Или вопрос чисто академический?
вопрос в том что, в mql4 стандартная функция
exp(-x)
где x это любое число типа double, выдает ошибку zero divide. если читать доки по mql, то функция
double MathExp( double value // степень для числа e );а если степень с минусом, тогда там расчет идет через деление, т.е получается что експонента в какой-то степени при расчете дает 0, из-за округления.
код как он есть, весь, методом copy-paste приведите пожалуйста. Чтобы точно не было опечаток и zero-divide был именно в указанном месте и можно было проверить.
double func(double x) { double Out; Out=1/(1+1/(MathPow(2.71,x))); return(Out); }получается что 2.71^x=0, из-за округления, если изменить код на:
double func(double x) { double Out; Out=1/(1+exp(-x)); return(Out); }результат такой же.
получается что 2.71^x=0, из-за округления, если изменить код на: результат такой же.
и получается что при каком-то значении Х, експонента в степени -Х равна 0. отсюда и ошибка, а как поправить хз. так как mql округляет просто до 0,
NormalizeDouble()
то же не помогает.
как вариант попробуйте заменить 1 на 1.0
в MQL иногда приведение типов double к int бывает неожиданным
double func(double x) { double Out; Out=1.0/(1.0+1.0/(MathPow(2.71,x))); return(Out); }
double func(double x) { // double Out; Out=NormalizeDouble(1/(1+exp(-x)),5); Print("OUT= ",Out); return(Out); }
если в функцию подаем значение равное 48, Out = 1, если подать -12,23 Out=0, вот как так то?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования