2015-12-25 8 views
5

В чем разница междусреднего значения двух целых чисел

int x = (right + left)/2; 

и

int x = left + (right - left)/2; 

только я получил предел исключения времени в первом случае и поступил во втором случае при выполнении двоичного поиска

+2

ну в первом случае у вас может быть переполнение целых чисел, если справа и слева слишком большие, поэтому вы должны использовать второй вариант –

+0

Хорошо, спасибо, теперь я понимаю. –

+0

@MadiSagimbekov просто совет, попробуйте самостоятельно отладить эти небольшие ошибки, проверив значения переменных на каждой итерации. – Daga

ответ

4

Сумма ИНТ переменных

правый + левый (из целых предела)

является слишком большой и превышает предел числа хранения , именно поэтому там был чрезмерно поток из-за сумма, но при использовании разностной версии второго

левого + (справа - слева) (в пределах целых ограничение)

подходит для расчета и в пользу машины.

2

Внутренний предел равен 2,147,483,647.

Ваше значение right+left не соответствует int.
Но значение left + (right - left)/2 меньше, чем int связано, так что второе выражение работает отлично.

если вы добавляете такие большие цифры, используйте long.

Смежные вопросы