From 63602c5647ac1ddaca64a83a3f6710fca6150db2 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Sun, 8 Sep 2024 22:28:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D0=B8=D0=BD=D0=B0=D1=80=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=BD=D0=B0=20Java.m?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/java/Бинарный поиск на Java.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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`.