2010-04-14 12 views
7

czy następująca jest własność arytmetyczna liczb całkowitych?właściwości dzielenia całkowitoliczbowego

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

Początkowo myślałem, że znam odpowiedź (nie ma), ale teraz nie jestem pewien. Czy zachowuje wszystkie numery lub tylko pod pewnymi warunkami, tj. n > l?

pytanie dotyczy arytmetyki komputerowej, a mianowicie q = n/m, q*m != n, ignorując przepełnienie.

+0

Czy dbasz o krawędzi przypadki takie jak przepełnienia? Lub dziwne architektury/języki takie jak te, w których 'n/m' zaokrągla w dół zamiast w kierunku zera? –

Odpowiedz

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) 
+0

Nieprawda, jeśli n * l powoduje przekroczenie ograniczenia typu liczba całkowita. – mtrw

+1

@mtrw, aby być uczciwym, to zrozumiałe – Anycorn

+0

@ziang, @aaa - Zignorowałem to myślenie, że przepełnienie było ważną częścią tego pytania. Teraz mój downwinter jest za stary, by go cofnąć. Przepraszam ziang. – mtrw

5

Mówisz o liczb matematycznych? Lub liczby całkowite o stałej szerokości w języku programowania?

Te dwa równania są identyczne z matematycznymi liczbami całkowitymi, ale dwie funkcje mają różne zachowania przepełnienia, jeśli używasz liczb całkowitych o stałej szerokości.

Na przykład, załóżmy, że liczby całkowite są 32-bitowe

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

Jednak 65536 * 65537 wyleje się 32-bitową liczbę całkowitą, a wyniesie 65536, więc

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

+1 za pokonanie mnie. I gdybym mógł, kolejny +1 za to, że byłby jedynym respondentem, który złapałby słowo integer! – mtrw

Powiązane problemy