差一错误是在计数时由于边界条件判断失误导致结果多了一或少了一的错误,通常指计算机编程中循环多了一次或者少了一次的程序错误,属于逻辑错误的一种。比如,程序员在循环中进行比较的时候,本该使用“小于等于”,但却使用了“小于”,或者是程序员没有考虑到一个序列是从0而不是1开始(许多程序语言的数组下标都是这样)。在数学领域,此错误也时有发生。
遍历数组假设有一堆物品,按m到n(含)依次编号。那么这堆物品的总数是多少?我们可能会直觉地认为有(n-m)个物品,但这就和正确答案差了一,犯了栅栏错误。正确答案应该是(n-m+ 1)个物品。
因此,计算机领域中,涉及范围的时候通常用半开区间来表示,从m到n(含)的范围就表示成从m到n+ 1(不含),以避免栅栏错误。例如,一个迭代五次的循环可以写成0到5的半开区间:
for (i = 0; i