07/05/01 18:00:03
宿題の答えとしては条件に合わない方法
unsinged long c = a + b;
if(c < a) {
puts("Overflow");
} else {
puts("(a+b) OK");
}
∵)
オーバーフローしたとすると、
c = a + b - m (m = 0x100000000)
c >= a だと仮定すると b >= m となるが、b < m なので矛盾する。
従って、オーバーフローした場合は必ず c < a となる。
逆に、オーバーフローしていない場合に
必ず c >= a になるのは自明。
∴ c < a ならばオーバーフローしている。