| / | Форум |
|
xenon13
05.10.2007 00:40
|
|
Статья для начинающих кулинаров в приготовлении "слоёных" пирогов |
5089 |
stringo
05.10.2007 09:30
Не бред, а внутреннее представление вещественных чисел. На входе второй параметр представлен как 0.10000000000000001 На выходе функции результат - 0.099999999999999728 |
|
xenon13
05.10.2007 10:11
stringo писал (а):
Не бред, а внутреннее представление вещественных чисел. На входе второй параметр представлен как 0.10000000000000001 На выходе функции результат - 0.099999999999999728
Функция выдает в корне не верный результат, что тут вообще еще можно обсуждать ? |
|
Mathemat
05.10.2007 10:21
Вообще-то такую функцию принято применять к целым числам. Ну а если применяешь к вещественным - будь готов к сюрпризам, так как она не является непрерывной от своих аргументов. |
5089 |
stringo
05.10.2007 10:30
Зачем чего-то подгонять? MathMod просто-напросто вызывает функцию fmod из crt. Вы вообще какого результата ожидали? чистого 0 или числа в диапазоне от 0 до 0.1? |
|
xenon13
05.10.2007 10:56
Mathemat писал (а):
Вообще-то такую функцию принято применять к целым числам. Ну а если применяешь к вещественным - будь готов к сюрпризам, так как она не является непрерывной от своих аргументов.
stringo писал (а):
Зачем чего-то подгонять? MathMod просто-напросто вызывает функцию fmod из crt. Вы вообще какого результата ожидали? чистого 0 или числа в диапазоне от 0 до 0.1?
Откуда берется остаток 0.1 !!! ладно хотя бы 0.0000000000000000000000000000000001 или что-то подобное, но ошибка в первом знаке после запятой ???? |
5089 |
stringo
05.10.2007 11:14
Я ещё раз повторяю, что на входе параметр не 0.1 ровно, а 0.10000000000000001.
Это я в отладчике посмотрел. Добро пожаловать в мир вещественных
чисел!
|
|
xenon13
05.10.2007 11:30
stringo писал (а):
Я ещё раз повторяю, что на входе параметр не 0.1 ровно, а 0.10000000000000001. Это я в отладчике посмотрел. Добро пожаловать в мир вещественных чисел!
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 ???? |
|
Mathemat
05.10.2007 11:46
xenon13 писал (а): Вы как всегда ни к месту и ни ко времени, посмотрите прототип
функции.
xenon13, я видел прототип. Еще раз повторяю, если Вы не поняли: функция MathMod() терпит разрыв (неустранимый) в точках, в которых первый аргумент кратен второму. 5 кратно 0.1, а уж насколько точно - это уже зависит от того, что сказал stringo. P.S. Я прекрасно знаю, для чего существует функция взятия по модулю в теории целых чисел. Зачем в crt реализована та же функция с вещественными аргументами - не понимаю. |
|
KimIV
05.10.2007 11:54
xenon13 писал (а):
stringo писал (а):
Не бред, а внутреннее представление вещественных чисел. На входе второй параметр представлен как 0.10000000000000001 На выходе функции результат - 0.099999999999999728
Функция выдает в корне не верный результат, что тут вообще еще можно обсуждать ? Слава, я согласен с xenon13. Математика есть матиматика. Посмотрите на это с точки зрения именно матиматика и согласитесь, что реализация функции fmod кривоватая. Из моих проверок: Мне такой расклад тоже не по душе... |
5089 |
stringo
05.10.2007 12:00
Мы ничего никуда не округляем (до 0.1 или до 0.4). Почитайте документацию. Это Print выводит вещественные числа с точностью до 4-го знака. Хотите увидеть (именно увидеть) точность до 8-го знака используйте функцию DoubleToStr. Или DoubleToStrMorePrecision из наших примеров |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий