Не бред, а внутреннее представление вещественных чисел.
На входе второй параметр представлен как 0.10000000000000001
На выходе функции результат - 0.099999999999999728
Не бред, а внутреннее представление вещественных чисел.
На входе второй параметр представлен как 0.10000000000000001
На выходе функции результат - 0.099999999999999728
А может мы будем язык программирования подгонять под математику
а не математику под представления вещественных чисел ???
Функция выдает в корне не верный результат, что тут вообще еще можно обсуждать ?
Вообще-то такую функцию принято применять к целым числам. Ну а если применяешь к вещественным - будь готов к сюрпризам, так как она не является непрерывной от своих аргументов.
Вообще-то такую функцию принято применять к целым числам. Ну а если применяешь к вещественным - будь готов к сюрпризам, так как она не является непрерывной от своих аргументов.
Вы как всегда ни к месту и ни ко времени, посмотрите прототип
функции. И ник смените, с математикой Вы явно не в ладах, судя
по Вашим постам и жаждой отметиться в любой ветке.
Зачем чего-то подгонять? MathMod просто-напросто вызывает функцию fmod из crt.
Вы вообще какого результата ожидали? чистого 0 или числа в диапазоне от 0 до 0.1?
Хм, давайте обсудим математику 1 класса: 5/0.1 = 50
Откуда берется остаток 0.1 !!! ладно хотя бы 0.0000000000000000000000000000000001 или что-то подобное, но ошибка в первом знаке после запятой ????
Я ещё раз повторяю, что на входе параметр не 0.1 ровно, а 0.10000000000000001. Это я в отладчике посмотрел. Добро пожаловать в мир вещественных чисел!
Я тоже посмотрел в VS C++:
double a = 5;
double b = 0.1;
double c = fmod(a,b);
Итого:
a = 5.000...1
b = 0.10000....1
c = 0.099999999...728
Ну если уж Вы напрямую взяли fmod из crt, на кой округлять результат в MQL4 до 0.1 ? Оно как раз и сбивает с толку.
Как я отличу теперь 0.1 от 0.09999.....728 ????
xenon13, я видел прототип.
Еще раз повторяю, если Вы не поняли: функция MathMod() терпит разрыв (неустранимый) в точках, в которых первый аргумент кратен второму. 5 кратно 0.1, а уж насколько точно - это уже зависит от того, что сказал stringo.
P.S. Я прекрасно знаю, для чего существует функция взятия по модулю в теории целых чисел. Зачем в crt реализована та же функция с вещественными аргументами - не понимаю.
Не бред, а внутреннее представление вещественных чисел.
На входе второй параметр представлен как 0.10000000000000001
На выходе функции результат - 0.099999999999999728
А может мы будем язык программирования подгонять под математику
а не математику под представления вещественных чисел ???
Функция выдает в корне не верный результат, что тут вообще еще можно обсуждать ?
Слава, я согласен с xenon13. Математика есть матиматика. Посмотрите на это с точки зрения именно матиматика и согласитесь, что реализация функции fmod кривоватая.
Из моих проверок:
Print(MathMod(4, 0.5)); возвращает 0
Print(MathMod(4, 0.4)); возвращает 0.4
Мне такой расклад тоже не по душе...
Мы ничего никуда не округляем (до 0.1 или до 0.4). Почитайте документацию. Это Print выводит вещественные числа с точностью до 4-го знака. Хотите увидеть (именно увидеть) точность до 8-го знака используйте функцию DoubleToStr. Или DoubleToStrMorePrecision из наших примеров
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Print (MathMod(5, 0.1));
Выдает 0.1
Что за бред ?