fencepost error


fencepost error (ошибка подсчета столбов в ограде), сущ 1. Если вы хотите построить ограду длиной 100 футов из столбов, расположенных на расстояни 10 футов друг от друга, то сколько столбов вам понадобится? Очевидный ответ -10, но ответ 9 ил 11 столбов будет ближе к истине. Аналогичная проблема возникает при подсчете точного числа циклов в программе. Например, если вы хотите обработать элементы длинного списка начиная с m-го до элемента с номером n, сколько раз будет крутиться цикл? Очевидный ответ п — т, но правильным ответом будет п — т+ 1. Программа, работающая с «очевидными» формулами, с большой вероятностью приведет к ошибке подсчета столбов в ограде. См. также zeroth (нулевая ошибка) и off-by-one error (ошибка плюс-минус один). Заметим, что не всякая ошибка типа «плюс-минус один» является ошибкой подсчета столбов в ограде. Например, известная с детского сада игра «музыкальные стулья», в которой N детей ходят под музыку вокруг N— 1 стульев и по сигналу воспитательницы пытаются на них усесться, как раз основана на ошибке типа «плюс-минус один», но это вовсе не ошибка подсчета столбов в ограде. Более точно такой ошибкой можно назвать такую ошибку, которая базируется на подсчете объектов, а не промежутков между ними, или которая возникает из-за неучтенных крайних объектов 2. Иногда этим термином называют ошибку чтения ввода с клавиатуры, когда программа не может правильно разобрать командную строку из-за лишних пробелов.