avatar
Миша пишет код
@misha_writes_code
26.10.2023 18:56
Хороший ли это код?

int mult(int a, int b) {
return a * b;
}

Ну в целом как будто да. Ну может иногда быть переполнение, но вроде норм. Но переполнение это же опасная ситуация, поэтому давайте прикинем, насколько этот код опасный.

Как мы знаем, int находится в интервале [-2147483648, 2147483647], при этом, переполнение вызывает даже -2147483648 * -1 ))

Так насколько часто тут будет происходить переполнение?

Хотел изначально сгенерировать картинку, в которой пиксель (i, j) будет черным, если i * j вызывает переполнение. Заранее мозгом воспользоваться не сумел и понял, что ошибся в рассчетах, только когда кончилась оперативка и swap вырос в 50гб. Посчитал и оказалось, что такая картинка будет весить 1M петабайт. Упс))

Но в итоге все-таки сгенерировал картинку для char (2 картинка, -128, 127 по осям). Желтенькое - все ситуации, когда переполнения не будет. Таких ситуаций всего 3073. Маловато как-то - 0.04% всех возможных умножений не переполняется.

Утверждается, что для int процент умножений с переполнением вообще доходит до 99.9999993%.

Так что фразу "иногда бывает переполнение" корректнее писать так: "иногда бывает не переполнение"
🔥 6
👍 2
297

Обсуждение 0

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram