Допустим. Тогда это значение при imax == 0111...1 должно оказаться результатом imax*2+1, т.е. 0111...1*2 == 0111...1, из чего вытекает saturation к значению, не являющемуся максимальным. Не бывает.
huh? в условии спрашивается, как устроить, чтобы *2+1 НЕ приводило к максимальному значению ("не будет работать"), ну так оно и не приводит.
Максимальное значение 10000....0 Прыжки *2+1 приводят к 0111....1, следующий такой прыжок даст 1111...1 = -1, отрицательное число, поэтому алгоритм останавливается на 0111...1, но на самом деле максимальное целое значение на 1 больше.
Ну так реалистичная. Если по какой-то причине очень-очень надо расширить диапазон представления положительных чисел на единичку, то самый дешевый способ это сделать - вот так.
Максимальное значение 10000....0
Прыжки *2+1 приводят к 0111....1, следующий такой прыжок даст 1111...1 = -1, отрицательное число, поэтому алгоритм останавливается на 0111...1, но на самом деле максимальное целое значение на 1 больше.