Хороший ли это код?
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%.
Так что фразу "иногда бывает переполнение" корректнее писать так: "иногда бывает не переполнение"
Обсуждение 0
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram