В чем разница междусреднего значения двух целых чисел
int x = (right + left)/2;
и
int x = left + (right - left)/2;
только я получил предел исключения времени в первом случае и поступил во втором случае при выполнении двоичного поиска
В чем разница междусреднего значения двух целых чисел
int x = (right + left)/2;
и
int x = left + (right - left)/2;
только я получил предел исключения времени в первом случае и поступил во втором случае при выполнении двоичного поиска
Сумма ИНТ переменных
правый + левый (из целых предела)
является слишком большой и превышает предел числа хранения , именно поэтому там был чрезмерно поток из-за сумма, но при использовании разностной версии второго
левого + (справа - слева) (в пределах целых ограничение)
подходит для расчета и в пользу машины.
Внутренний предел равен 2,147,483,647.
Ваше значение right+left
не соответствует int
.
Но значение left + (right - left)/2
меньше, чем int
связано, так что второе выражение работает отлично.
если вы добавляете такие большие цифры, используйте long
.
ну в первом случае у вас может быть переполнение целых чисел, если справа и слева слишком большие, поэтому вы должны использовать второй вариант –
Хорошо, спасибо, теперь я понимаю. –
@MadiSagimbekov просто совет, попробуйте самостоятельно отладить эти небольшие ошибки, проверив значения переменных на каждой итерации. – Daga