int isOverflow(uint a, uint b) {
// a and b are unsigned non-zero integers.
uint c = a * b;
if (c < (a > b ? a : b))
return 1;
else
return 0;
}
Я что-то упустил? Я думаю, что этот фрагмент будет работать.этого условия достаточно для проверки переполнения при умножении
EDIT: Я видел другие решения, такие как multiplication of large numbers, how to catch overflow, который использует некоторые причудливые методы для его проверки. Но мне выше простого решения также выглядит правильно. Вот почему я задаю этот вопрос.
На многих процессорах умножения более эффективны, чем деления. Я бы подумал, что использование функции для определения того, является ли продукт представимым, было бы чище, чем бросать много целых делений по всему месту. – supercat