13/02/06 15:04:10.77
2で割って足して、先頭bitを確認するとか?
余った分を足すのを忘れないように
75:デフォルトの名無しさん
13/02/06 15:06:27.48
#define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))
76:デフォルトの名無しさん
13/02/06 15:07:51.80
>>75
間違った
×> #define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))
○> #define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (y))
77:デフォルトの名無しさん
13/02/06 15:20:07.55
>>76
片方だけでいいんちゃう?
78:デフォルトの名無しさん
13/02/06 15:27:34.92
#define isOverflow(x, y) (~(x) < (y) )
これでいいか
79:デフォルトの名無しさん
13/02/06 15:29:41.18
>>77
#define isOverflow(x, y) (((x) + (y)) < (x))
だけでいいね
>>74は
#define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1) >= (1 << (sizeof(unsigned int) * 8 - 1)))
かな
80:デフォルトの名無しさん
13/02/06 15:37:39.60
uint32_t
isOverfloow(uint32_t x,uint32_t y)
{
uint32_t z;
uint32_t a;
a=x%2+y%2;
a/=2;
z=x/2+y/2;
z+=a;
return z&0x80000000;
}
81:79
13/02/06 15:52:30.85
>>80
ああ、そうだった。
ということで>>79は
×> #define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1) >= (1 << (sizeof(unsigned int) * 8 - 1)))
○> #define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1)) & (1 << (sizeof(unsigned int) * 8 - 1))
82:デフォルトの名無しさん
13/02/06 20:13:44.65
いっそのこと64bitで計算して判定すれば?