int div_(double i, double val) { return ceil(i / val); } int bsrch( int array[], size_t size, int value ) { size /= sizeof(decltype(array)); if( size == 0 ) { return -1; } int start = size / 2; int add = 0; for( int i = start, k = start;; k = div_(k, 2) ) { if( array[i-1] == value ) { return i-1; } if( value < array[i-1] ) { i = add + div_(k,2); } else if( value > array[i-1] ) { add += k; i = div_(k,2) + add; } } return -1; }