double n = -1/MathPow(5.5, 0.2); Print(n);
Мне потребовалось написать функцию работающую со степенями и в процессе написания открыл для себя кое что интересное, а именно:
Если возмести отрицательное дробное число в отрицательную дробную степень, то MQL5 - пишет -nan.
Я проверил в C++ где тот же результат получил (не знаю какая версия языка использовалась, так как мне лень было компилировать и я по быстрому на cpp.sh протестил)
Раз и в плюсах выдает тот же самый ответ то как бы в MQL5 точно нету ошибки! Но вопрос от чего так получается ? Если обратиться к математике то ответ должен быть. Математически число в отрицательной степени равняется единице делённой на это же число в положительной степени. Иными словами:
И калькулятор на компьютере это подтверждает. Так в чем же собственно эта фишка со степенями кроется ?
в 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
Вывод, функция не правильно считает дробную степень, и возвращает zero divide.
m = 2
n = 10
без скобок знак минус можно по разному интерпретировать, имхоБлагодарю Вас за ответ, но вообще если брать арифметически верное решение, то тут похоже только с комплексными числами полечится реализовать подобное... В предложенном Вами способе нужно разбивать степень так что бы подкореное значение всегда имело положительную степень и ответ всегда будет положителен. Но если брать без этого подгона - то приходим только к комплексным числам, ведь согласно общепринятой алгеброической модели на сколько я знаю (я не математик по образованию) - корень из отрицательного числа будет комплексным числом.
В калькуляторе где степень дробная
В mql где степень дробная
В mql где степень целое
Вывод, функция не правильно считает дробную степень, и возвращает zero divide.
Функция верна. Там просто стандартная математика не подходит)
Функция верна. Там просто стандартная математика не подходит)
-0.2 это не ноль, чтобы возвращать ошибку деления на ноль.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Мне потребовалось написать функцию работающую со степенями и в процессе написания открыл для себя кое что интересное, а именно:
Если возмести отрицательное дробное число в отрицательную дробную степень, то MQL5 - пишет -nan.
Я проверил в C++ где тот же результат получил (не знаю какая версия языка использовалась, так как мне лень было компилировать и я по быстрому на cpp.sh протестил)
Раз и в плюсах выдает тот же самый ответ то как бы в MQL5 точно нету ошибки! Но вопрос от чего так получается ? Если обратиться к математике то ответ должен быть. Математически число в отрицательной степени равняется единице делённой на это же число в положительной степени. Иными словами:
И калькулятор на компьютере это подтверждает. Так в чем же собственно эта фишка со степенями кроется ?