Off-by-oneエラー
Off-by-oneエラー(オフ-バイ-ワンエラー、off-by-one error、OBOE)とは、境界条件の判定に関するエラーの一種である。コンピュータプログラミングにおいて、ループが正しい回数より一回多く、または一回少なく実行された場合などに発生する。
この問題の代表的な原因として、プログラマーが数字のカウントを0からではなく1から開始してしまう(多くのプログラミング言語では配列の添え字は0から始まる)、数値の比較において「~未満」とすべきところを「~以下」としてしまう、等が挙げられる。また、数学的な処理を行っている場合にも発生しうる。
つまり、iは0, 1, 2, 3, 4, 5と増加し、5まで実行される。同様に、iが0でなく1で初期化されていた場合にはループは4回しか実行されない。つまり、iは1, 2, 3と増加し、4まで実行される。これらのケースはどちらもoff-by-oneエラーの一種である。
このようなエラーが発生する他の例としては、while文を使用すべきところでdo-while文を使用した場合(逆も同じ)が挙げられる。do-whileループは必ず1回は実行される。
配列関連の勘違いはプログラミング言語ごとの差異に由来する場合もある。配列の添え字は0から始まる場合が一般的だが、1から始まる言語もいくつかある。Pascalでは配列の添え字をユーザが指定した数字から始めることができるが、これにより配列の添え字を問題のドメインに合わせて設定することができる。