> ・intで掛け算してからunsigned intにキャスト
> ・unsigned intにキャストしてから掛け算
符号無しにしたところでたかだか2倍なんで、
オーバーフローするって問題はどっちも持ってる。
思い付いた力業w
for (i = 0; i < a; ++i) {
  assert((int)pow(2, sizeof(unsigned int) * 8) - sum >= b);
  sum += b;
}