Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
-0.2 это не ноль, чтобы возвращать ошибку деления на ноль.
Функция возвращает -nan, т.е. Not a Number. а ошибка кидается при попытке поделить на -nan. Если на то пошло то просто текст ошибки неподходящий.
Правильное решение: решение находится в комплексной области.
Но если речь идёт том, чтобы иметь разные ветви решений для положительных и отрицательных входных параметров, то надо просто для начала эти ветви определить:
.
Сделай такую функцию и всё будет хорошо. ;)Функция возвращает -nan, т.е. Not a Number. а ошибка кидается при попытке поделить на -nan. Если на то пошло то просто текст ошибки неподходящий.
Так а c какого фига -0.2 это -nan ? :))
Ещё тест функции
В калькуляторе
В mql функции
Так а c какого фига -0.2 это nan ? :))
Ещё тест функции
В калькуляторе
В mql функции
не -0,2 - nan, а результат возведения в степень.
Дробная степень числа (а^m/n) - это корень n степени из a^m.
Если подкоренное значение - отрицательно будет, а оно может быть как отрицательным, так и положительным исходя из степени m ну и самого числа a (которое в моей задачи всегда отрицательно, по этому при положительной степени m оно положительно а при отрицательной - отрицательно). Так вот если подкоренное значение отрицательно то и число тоже отрицательное. Корень из отрицательного числа - лежит в комплексной области, а посему мы не можем оперировать значениями комплексной области через обычный тип double и из за этого стандартная реализация степени - выдает -nan.
Правильное решение: решение находится в комплексной области.
Но если речь идёт том, чтобы иметь разные ветви решений для положительных и отрицательных входных параметров, то надо просто для начала эти ветви определить:
.
Сделай такую функцию и всё будет хорошо. ;)Благодарю Вас за подробный ответ. Но мне комплексное исчисление не подходит для моей задачи, по этому скорее всего ограничусь натуральными числами и в результате не буду попадать в комплексную область.
Благодарю Вас за подробный ответ. Но мне комплексное исчисление не подходит для моей задачи, по этому скорее всего ограничусь натуральными числами и в результате не буду попадать в комплексную область.
Так об этом я и говорю, и специально показал пример. Внимательно посмотри. Этот пример именно для твоего случая подходит.
зы
перевести на мкл очень просто
не -0,2 - nan, а результат возведения в степень.
Степень дробного числа (а^m/n) - это корень n степени из a^m.
Если подкоренное значение - отрицательно будет, а оно может быть как отрицательным, так и положительным исходя из степени m ну и самого числа a (которое в моей задачи всегда отрицательно, по этому при положительной степени m оно положительно а при отрицательной - отрицательно). Так вот если подкоренное значение отрицательно то и число тоже отрицательное. Корень из отрицательного числа - лежит в комплексной области, а посему мы не можем оперировать значениями комплексной области через обычный тип double и из за этого стандартная реализация степени - выдает -nan.
Андрей, да, не так выразился, это понятно что результат возведения в степень возвращает -nan.
Но порождает этот результат, дробная степень, где целое число является нулём -0.2
Калькулятор же правильно всё считает.
И предыдущий тест, тоже не так считает как в калькуляторе.
Так об этом я и говорю, и специально показал пример. Внимательно посмотри.
да, все понял. благодарю. (даже формула готовая написана)
Возможно ноги растут от того что нельзя взять четный корень из отрицательного числа ? Я уже несколько запутался... И самое главное как обойти это ?
Целые степени определяются просто через перемножение (и взятие обратного для отрицательных показателей), поэтому легко переносятся на отрицательные основания. Дробные степени определяются через логарифм и экспоненту: y^x=exp(x*ln(y)) и с отрицательными числами выходим в комплексную плоскость. У логарифма бесконечное число ветвей и чтобы не заморачиваться с поиском подходящей ветви, возвращают NAN.
Благодарю Вас за ответ, но вообще если брать арифметически верное решение, то тут похоже только с комплексными числами полечится реализовать подобное... В предложенном Вами способе нужно разбивать степень так что бы подкореное значение всегда имело положительную степень и ответ всегда будет положителен. Но если брать без этого подгона - то приходим только к комплексным числам, ведь согласно общепринятой алгеброической модели на сколько я знаю (я не математик по образованию) - корень из отрицательного числа будет комплексным числом.
считайте по формуле, что я Выше предложил
вот один в один по формуле:
а вот пример как double в дробь перевести
https://www.mql5.com/ru/forum/290279#comment_9396706