diff --git a/dev/java/Бинарный поиск на Java.md b/dev/java/Бинарный поиск на Java.md index 11a4f5cb..cb960e05 100644 --- a/dev/java/Бинарный поиск на Java.md +++ b/dev/java/Бинарный поиск на Java.md @@ -75,11 +75,11 @@ public class Binary { Если элемент не найден, то вернется `-1`. > [!WARNING] m = l + (r - l) / 2; -> Во многих примерах в интернете можно встретить запись `int m = (l + r) / 2;`, вместо `int mid = l + (r - l) / 2;`. И у меня в заметке тоже была такая запись, пока один из читателей не обратил на это внимание. +> Во многих примерах в интернете можно встретить запись `int m = (l + r) / 2;`, вместо `int mid = l + (r - l) / 2;`. > > Но использование второго варианта является лучшей практикой, так как это помогает избежать переполнения, когда размер массива велик. > -> Например, если `l = 2147483647` и `r = 2147483647`, сумма `l` и `r` будет равна 4294967294, что превышает максимальное значение, которое может удерживать `int`, вызывая переполнение. +> Например, если `l = 2147483647` и `r = 2147483647`, сумма `l` и `r` будет равна 4294967294, что превышает максимальное значение, которое может хранить `int`, вызывая переполнение. > > С другой стороны, если вы используете `mid = l + (r - l) / 2;` это будет работать, как и ожидалось, потому что вычитание будет сделано первым, а результат будет равен нулю, поэтому деление будет равно нулю, а сложение вернет значение `l`.