Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 973
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте.
Прошу помочь разобраться. При проверке работы простого массива (присваиваю значение);
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]);
Получаю результат:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Как так ?
Здравствуйте.
Прошу помочь разобраться. При проверке работы простого массива (присваиваю значение);
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]);
Получаю результат:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Как так ?
сложный пример у Вас для воспроизведения, но подозреваю, что из за приведения типов Вы получаете не то, что ожидали
поэкспериментируйте с таким кодом:
затем с такими:
и
и поиском по форуму "вещественные числа", если кратко, то "Си-шное" приведение типов поначалу вызывает недоумение ;)
Вы показали кучу примеров с применением переменных типа int.
У меня все переменные double.
Так что приведение переменных к одному формату не пройдет.
Вы показали кучу примеров с применением переменных типа int.
У меня все переменные double.
Так что приведение переменных к одному формату не пройдет.
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]);
Получаю результат:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Как так ?
у Вас целые константы, как и сам пример не воспроизводим - нет типов переменных, ну и в целом - моя "куча примеров" может быть посчитана без ПК, Ваш же пример... ну скажите на вскидку сколько будет е^(-91.49999)
ладно, проехали не смогу помочь
Очень жаль... что " не смогу помочь"...
Дело не в том сколько будет e^(-91.49999). Вопрос в том почему в переменную типа double = H, неправильно записывается
вычисленное ранее число типа double = 0.7310585786300049 , а записывается 1.0 (кстати double).
Если Вы потрудитесь запустить мой код в тестере , предполагаю Ваш МТ4 выдаст тоже самое.
Если так то MQL4 для работы использовать просто нельзя и опасно!
Очень жаль... что " не смогу помочь"...
я помог, помощь не означает сделайте за меня или я все равно не буду читать, а результат мне важен!
Если так то MQL4 для работы использовать просто нельзя и опасно!
поведение при расчете математических выражений MQL4 / MQL5 полностью совпадает с С++, можете обратиться на любой форум по С++ со своим вопросом, может быть там актив сумеет помочь
ну и Ваш вопрос из области помогите/объясните/научите, перешел в область обсуждения платформы МТ, не нравится не юзайте, Вы ее получили бесплатно?
... в древние времена непонимание физических процессов вызывало у людей панический страх, то гром грянет, то землетрясение... сначала это вызывало панику и домыслы, потом появилась религия )))
Вы зря так рассердились.
Если я задел Ваши личные чувства, я искренне прошу прощения.
МТ4 я абсолютно не обсуждаю и не осуждаю. Я просто предложил запустить
присланный мной код в тестере МТ4, и если при условии , что все переменные (H, a[0][2])
определены как double , а результат такой же как у меня, то у меня возникает вопрос :
в чем дело? Вам я его и адресовал.
Еще раз : Очень жаль... что " не смогу помочь"...
Всего доброго.
что все переменные (H, a[0][2])
определены как double
еще раз повторюсь - у Вас константы в математическом выражении есть? - в моем примере тоже есть константа 5 ... затем я написал 5.0 - для компилятора это не одно и то же! а затем я явно привел целую константу 5 к типу double ---> для компилятора это будет то же, что примером выше 5.0
Ваш вопрос повторяется регулярно на форуме, хотя возможно я не вижу в чем заключается Ваш вопрос - у Вас "тяжелая формула" и не очевидные переменные - уберите лишнее из примеров - массивы и экспоненту - тогда будет видно в чем вопрос, хотя если уберете все лишнее, скорее всего сами найдете где получили не то, что ожидали - у меня так обычно ;)
ЗЫ: а экспонента в степени минус 91.49 - это не сильно маленькое число? тип double имеет большую точность, но в сотой степени да и с учетом знака минус - по моему это выражение будет терять точность, не хочу гуглить, но первое что пролистал это Вики
Благодарю Вас за терпение!
Попробовал так :
A=91.49999999993754;//a[0][2]=91.49999999993754;
Print("A=",A);
H= 1/(1+exp(-A));
//A=H;
Print(" 1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2]);
Результат:
2019.09.21 16:14:17.691 2011.01.04 22:29:51 W EURUSD,H4: A=91.49999999993754
2019.09.21 16:14:17.690 2011.01.04 22:29:50 W EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0
Буду разбираться почему 1/(1+exp(-91.49999999993754))=1.0 .
Прошу меня понять. Сейчас я занимаюсь настройкой и обучением нейросети. сам код сырой, и даже я сам в нем путаюсь...:)
Заметил , что сеть повторяет ошибки. И основная ошибка в вычислении сигмоида. ОН НЕ ДОЛЖЕН БЫТЬ =1.
Благодарю Вас за терпение!
Попробовал так :
A=91.49999999993754;//a[0][2]=91.49999999993754;
Print("A=",A);
H= 1/(1+exp(-A));
//A=H;
Print(" 1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2]);
Результат:
2019.09.21 16:14:17.691 2011.01.04 22:29:51 W EURUSD,H4: A=91.49999999993754
2019.09.21 16:14:17.690 2011.01.04 22:29:50 W EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0
Буду разбираться почему 1/(1+exp(-91.49999999993754))=1.0 .
Прошу меня понять. Сейчас я занимаюсь настройкой и обучением нейросети. сам код сырой, и даже я сам в нем путаюсь...:)
Заметил , что сеть повторяет ошибки. И основная ошибка в вычислении сигмоида. ОН НЕ ДОЛЖЕН БЫТЬ =1.
так Вы ничего не найдете, вот решил проверить, нужно так искать где баг или не точность в коде:
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 4. e = 1.828331349163451e-40
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 3. H = 1.0
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 2. a = 1.0
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 1. a = 91.49999999993754