Читал тут код ядра линукс от нефиг делать, набрел на такую функцию двоичного поиска. Алгоритм двоичного поиска печально известен тем, что в нем очень часто делают ошибки https://ru.wikipedia.org/wiki/Двоичный_поиск
Учёный Йон Бентли утверждает, что 90 % студентов, разрабатывая двоичный поиск, забывают учесть какое-либо из этих требований. И даже в код, написанный самим Йоном и ходивший из книги в книгу, вкралась ошибка: код не стоек к переполнениям
http://lxr.free-electrons.com/source/kernel/groups.c#L133
133 int groups_search(const struct group_info *group_info, kgid_t grp)
134 {
135 unsigned int left, right;
...
143 unsigned int mid = (left+right)/2; <-- вот это вот
...