Дистанционная подготовка: Вопрос об округлении.
Вопрос об округлении.
от Никита Пушкин - Пятница 12 Сентябрь 2014, 18:07
894. Черепаха
  А как в этой задаче происходит округление? К примеру, черепаха от одного цветка до другого будет ползти 2,4 минуты. Что мне с этими десятыми делать? И что делать с накапливающейся погрешностью?
Re: Вопрос об округлении.
от Peter Cherepanov - Понедельник 15 Сентябрь 2014, 11:13
  Округление происходит в конце при выводе результата.
В задаче не так много действий, чтобы погрешности вычислений в действительных числах приводили к неверному ответу.
При желании можно работать с рациональными числами. Времени хватит.
Re: Вопрос об округлении.
от Никита Пушкин - Пятница 19 Сентябрь 2014, 16:28
  Нашел одну проблему, из-за которой моя программа работает некорректно.
В условии сказано, что округлять время нужно не нормальным способом, а вверх. В этом-то и кроется загвоздка. Представим себе такую ситуацию: цветочек всего один и время его прорастания — одна минута. Черепаха же у нас медленная, и к моменту ее прибытия к цветку тот уже прорастет, то есть черепахе ничего ждать не нужно, и реальное время ожидания равно 0.

Попробуем рассчитать время ожидания с помощью метода дихотомии. Минимальное время ожидания — 0, а максимальное — 1, то есть время прорастания нашего единственного цветка. Значит, первым значением переменной, отвечающей за среднее значение, будет число 0.5. Естественно, для нашей черепахи оно слишком велико(правильно, ей же вообще ждать не надо), поэтому мы его сокращаем до 0.25, потом до 0.125 и так далее, пока оно не станет меньше 0.1(нашей погрешности). И вот тут-то и начинается интересность. Время ожидания у нас не 0, а приближенное к нему число, а поскольку округляем мы вверх, а не по-нормальному, ответ наш будет на одну минуту больше, чем реальный.

Надеюсь, объяснил достаточно понятно. Какие есть советы по борьбе с этой проблемой?
Re: Вопрос об округлении.
от K O - Четверг 10 Декабрь 2015, 18:50
  Большое, спасибо!

Никак не мог разобраться, почему не работает моё решение, и этот пост помог мне понять суть проблемы округления.

Решил проблему следующим образом: перед выводом ответа от получившегося времени отнимаю погрешность (0.1).