執行以下整數算術屬性保留嗎?整數除法屬性
(m/n)/l == m/(n*l)
起初我以爲我知道答案(不成立),但現在不知道。 是否適用於所有數字或僅適用於某些條件,即n > l
?
該問題屬於計算機算術,即q = n/m, q*m != n
,忽略溢出。
執行以下整數算術屬性保留嗎?整數除法屬性
(m/n)/l == m/(n*l)
起初我以爲我知道答案(不成立),但現在不知道。 是否適用於所有數字或僅適用於某些條件,即n > l
?
該問題屬於計算機算術,即q = n/m, q*m != n
,忽略溢出。
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)
你說的是數學整數嗎?還是編程語言中的固定寬度整數?
這兩個公式與數學整數相同,但如果使用固定寬度整數,則兩個函數具有不同的溢出行爲。
例如,假設整數是32位
(1310720000/65536)/65537 = 20000/65537 = 0
然而,65536 * 65537將溢出32位整數,將等於65536,所以
1310720000/(65536*65537) = 1310720000/65536 = 20000
+1打我。如果我可以的話,另一個+1顯然是唯一的應答者來抓住整數! – mtrw 2010-04-14 03:14:45
你關心邊緣像溢出情況?或者像「n/m」向下舍入而不是朝向零的那些奇怪的架構/語言? – 2015-04-06 18:45:18