整数除法属性

时间:2010-04-14 02:43:11

标签: algorithm integer theory division

是否保持以下整数算术属性?

(m/n)/l == m/(n*l)

起初我以为我知道答案(不成立),但现在不确定。 它适用于所有数字还是仅适用于某些条件,即n > l

问题涉及计算机算术,即q = n/m, q*m != n,忽略溢出。

2 个答案:

答案 0 :(得分:12)

Case1 assume m = kn+b (b<n),
left = (m/n)/l = ((kn+b)/n)/l = (k+b/n)/l = k/l (b/n=0, because b<n)
right = (kn+b)/(n*l) = k/l + b/(n*l) = k/l (b/(n*l)=0, because b<n)
=> left = right

Case2 assume m = kn,
left = (m/n)/l = (kn/n)/l = k/l
right = kn/(n*l) = k/l
=> left = right

So, (m/n)/l == m/(n*l)

答案 1 :(得分:5)

你在谈论数学整数吗?或编程语言中的固定宽度整数?

这两个方程式与数学整数相同,但如果使用固定宽度的整数,则这两个函数具有不同的溢出行为。

例如,假设整数是32位

(1310720000/65536)/65537 = 20000/65537 = 0

然而,65536 * 65537将溢出32位整数,并将等于65536,所以

1310720000/(65536*65537) = 1310720000/65536 = 20000