Phép toán modulo
Tính toán phần dư trong phép toán modulo

Trong toán học, kết quả của phép toán modulo là số dư của phép chia có dư. Tuy vậy các quy ước khác vẫn tồn tại. Máy vi tính và máy tính có nhiều cách khác nhau để lưu trữ và đại diện cho các số; do đó định nghĩa của chúng về phép toán modulo phụ thuộc vào ngôn ngữ lập trình hoặc phần cứng máy tính bên dưới cơ bản.
Trong hầu hết các hệ thống máy tính, thương số q và số dư r của phép chia a cho n thỏa mãn
Tuy nhiên, vẫn còn sự nhập nhằng về dấu nếu số dư khác không: hai lựa chọn có thể cho số dư xảy ra, một âm và một dương, và hai lựa chọn cho thương số xảy ra. Trong lý thuyết số, thông thường số dư dương luôn được chọn, nhưng lựa chọn của các ngôn ngữ lập trình tùy thuộc vào ngôn ngữ và dấu của a hoặc n. Ngôn ngữ Pascal và ALGOL 68 tiêu chuẩn chọn số dư dương (hoặc 0) kể cả khi số chia là các số âm, đối với một vài ngôn ngữ lập trình như C90 thì dấu tùy thuộc vào cài đặt khi hoặc n hoặc a là số âm. Xem bảng để biết chi tiết. a modulo 0 là không xác định trong hầu hết các hệ thống, mặc dù một số hệ thống định nghĩa là a.
Nhiều cài đặt sử dụng phép chia rút gọn mà trong đó thương số được định nghĩa bởi hàm rút gọn q = trunc(a/n) do đó theo phương trình (1) số dư sẽ có cùng dấu với số bị chia. Thương số được làm tròn về số không: bằng số nguyên đầu tiên có phần hướng tới không của thương số hữu tỉ.
 r=a-n\operatorname {trunc} \left({\frac {a}{n}}\right)
Donald Knuth mô tả phép chia sàn trong đó thương số được định nghĩa bởi hàm floor q = ⌊a/n⌋, do đó theo phương trình (1) số dư sẽ có cùng dấu với số chia. Do hàm floor, thương số luôn được làm tròn xuống kể cả khi nó là số âm.
 r=a-n\left\lfloor {\frac {a}{n}}\right\rfloor
Raymond T. Boute mô tả định nghĩa phép chia có dư trong đó số dư luôn không âm, 0 ≤ r, phù hợp với giải thuật phép chia có dư. Trong đó,
 n>0\Rightarrow q=\left\lfloor {\frac {a}{n}}\right\rfloor 
 n<0\Rightarrow q=\left\lceil {\frac {a}{n}}\right\rceil 
hoặc tương đương
 q=\operatorname {sgn}(n)\left\lfloor {\frac {a}{\left|n\right|}}\right\rfloor 
với sgn là hàm sign, do đó
 r=a-|n|\left\lfloor {\frac {a}{\left|n\right|}}\right\rfloor
Ngôn ngữ Common Lisp cũng định nghĩa phép chia làm tròn và phép chia trần, trong đó thương số cho bởi q = round(a/n) và q = ⌈a/n⌉ tương ứng.
IEEE 754 định nghĩa hàm số dư trong đó thương số là a/n được làm tròn dựa trên quy ước làm tròn đến số gần nhất. Do vậy, dấu của số dư được chọn là gần với số 0 nhất.
Theo mô tả của Leijen,
Boute argues that Euclidean division is superior to the other ones in terms of regularity and useful mathematical properties, although floored division, promoted by Knuth, is also a good definition. Despite its widespread use, truncated division is shown to be inferior to the other definitions.
(Tạm dịch: Boute lập luận rằng phép chia có dư là vượt trội so với các phép chia khác về tính đều đặn và các thuộc tính toán học hữu ích, dù rằng với phép chia sàn, được Knuth ủng hộ, cũng là một định nghĩa tốt. Tuy được sử dụng rộng rãi, phép chia rút gọn được chứng minh kém hơn các định nghĩa khác.)
Tuy nhiên, Boute tập trung vào các tính chất của chính phép toán modulo và không đánh giá sự thật là phép chia rút gọn (tiếng Anh: truncated division) cho thấy sự đối xứng của (-a) div n = -(a div n) và a div (-n) = -(a div n), mà cũng giống phép chia thông thường. Bởi vì cả hai phép chia sàn và phép chia có dư đều không có tính đối xứng này, phán đoán của Boute ít nhất là không toàn diện.[cần dẫn nguồn]