2010-04-14 13 views
7

có thuộc tính số học số nguyên nào sau đây?thuộc tính phân chia số nguyên

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

Lúc đầu tôi nghĩ tôi biết câu trả lời (không giữ), nhưng bây giờ không chắc chắn. Nó có giữ tất cả các số hay chỉ cho một số điều kiện nhất định, tức là n > l?

câu hỏi liên quan đến số học máy tính, cụ thể là q = n/m, q*m != n, bỏ qua tràn.

+0

Bạn có quan tâm đến lợi thế cạnh trường hợp như tràn? Hay những kiến ​​trúc/ngôn ngữ kỳ lạ như những kiến ​​trúc mà 'n/m' làm tròn thay vì về 0? –

Trả lời

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

Không đúng nếu n * l tràn dòng giới hạn của loại số nguyên. – mtrw

+1

@mtrw là công bằng, mà không cần nói rằng – Anycorn

+0

@ziang, @aaa - Tôi đã bỏ qua suy nghĩ này rằng tràn là một phần quan trọng của câu hỏi. Bây giờ downvote của tôi là quá cũ để hoàn tác. Xin lỗi ziang. – mtrw

5

Bạn đang nói về các số nguyên toán học? Hoặc số nguyên cố định chiều rộng trong một ngôn ngữ lập trình?

Hai phương trình giống hệt nhau với số nguyên toán học, nhưng hai hàm có hành vi tràn khác nhau nếu bạn đang sử dụng số nguyên chiều rộng cố định.

Ví dụ, số nguyên giả sử là 32-bit

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

Tuy nhiên, 65536 * 65.537 sẽ tràn một số nguyên 32-bit, và sẽ tương đương 65.536, vì vậy

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

+1 để đánh bại tôi. Và nếu tôi có thể, một +1 khác cho dường như là người trả lời duy nhất để nắm bắt số nguyên từ! – mtrw