Memahami konvensi tanda
Kedua konvensi menghasilkan hasil yang identik ketika kedua bilangan positif, tetapi berbeda ketika ada nilai negatif yang terlibat, seperti ditunjukkan di bawah ini.
| a | b | Hasil floor (tanda b) | Hasil truncate (tanda a) |
|---|---|---|---|
| 13 | 5 | 3 | 3 (sama — keduanya positif) |
| −13 | 5 | 2 | −3 |
| 13 | −5 | −2 | 3 |
| −13 | −5 | −3 | −3 (sama — keduanya negatif) |
- Modulo floor (digunakan sebagai hasil utama secara default di sini) adalah konvensi yang paling umum dalam matematika murni dan teori bilangan, dan sesuai dengan operator % bawaan Python.
- Modulo truncate (ditampilkan sebagai hasil sekunder) sesuai dengan operator % bawaan pada JavaScript, C, C++, Java, dan sebagian besar bahasa keluarga C, di mana tanda sisa mengikuti bilangan yang dibagi.
- Modulo dengan nol tidak terdefinisi dan tidak dihitung oleh kalkulator ini; pembagi harus berupa angka bukan nol.
Apa itu operasi modulo?
Operasi modulo, ditulis a mod b (atau a % b), mengembalikan sisa saat a dibagi b. Misalnya, 13 mod 5 = 3, karena 13 = 2 × 5 + 3 — membagi 13 dengan 5 menghasilkan hasil bagi 2 dengan sisa 3. Modulo adalah dasar dari teori bilangan (aritmetika modular/jam), ilmu komputer (hashing, pengindeksan siklik, checksum) dan penalaran sehari-hari tentang sisa dan siklus (seperti hari dalam seminggu atau jam pada arloji).
Ada dua konvensi matematika yang banyak digunakan untuk menentukan tanda hasil ketika bilangan negatif terlibat: modulo floor, yang hasilnya selalu bertanda sama dengan pembagi b, dan modulo truncate, yang hasilnya selalu bertanda sama dengan bilangan yang dibagi a. Keduanya merupakan definisi 'sisa' yang sah secara matematis dan sama persis ketika a dan b sama-sama positif; keduanya hanya berbeda ketika ada nilai negatif yang terlibat.
Pilihan konvensi ini penting dalam praktik karena bahasa pemrograman yang berbeda menerapkan default yang berbeda pula: operator % pada Python menggunakan modulo floor, sedangkan JavaScript, C, C++, Java dan sebagian besar bahasa keluarga C menggunakan modulo truncate (mengikuti tanda bilangan yang dibagi). Kalkulator ini melaporkan kedua hasil secara eksplisit sehingga kedua konvensi dapat langsung dibaca.
Cara menggunakan kalkulator modulo ini
- Masukkan bilangan yang dibagi (a) — angka yang akan dibagi.
- Masukkan pembagi (b) — angka yang menjadi pembagi. Pembagi tidak boleh 0, karena pembagian (dan modulo) dengan nol tidak terdefinisi.
- Baca hasil konvensi floor (tanda selalu mengikuti pembagi) — konvensi matematis yang paling umum dalam teori bilangan.
- Bandingkan dengan hasil konvensi truncate (tanda selalu mengikuti bilangan yang dibagi) jika Anda perlu mencocokkan operator % bawaan bahasa pemrograman tertentu, dan periksa hasil bagi serta persamaan pembagian lengkap untuk rincian perhitungannya.
Rumus modulo floor vs. truncate
Modulo floor mendefinisikan hasil bagi sebagai q = ⌊a ÷ b⌋ (dibulatkan ke bawah, menuju negatif tak hingga), lalu r = a − b×q. Ini menjamin sisa r selalu bertanda sama dengan pembagi b (atau bernilai 0), dan memenuhi 0 ≤ r < |b| saat b > 0. Contoh perhitungan: 13 mod 5: q = ⌊13/5⌋ = 2, r = 13 − 5×2 = 3.
Contoh perhitungan dengan bilangan yang dibagi negatif: −13 mod 5 (floor): q = ⌊−13/5⌋ = ⌊−2,6⌋ = −3, r = −13 − 5×(−3) = −13 + 15 = 2. Perhatikan hasilnya positif (mengikuti pembagi yang positif), yang berbeda dari hasil truncate di bawah.
Modulo truncate mendefinisikan hasil bagi dengan membulatkan menuju nol, bukan menuju negatif tak hingga, lalu menghitung sisa dengan cara yang sama; ini menjamin sisa selalu bertanda sama dengan bilangan yang dibagi a (atau bernilai 0). Contoh perhitungan: −13 mod 5 (truncate, hasil % pada JavaScript/C/Java): hasil bagi membulatkan −2,6 menuju nol menjadi −2, sehingga r = −13 − 5×(−2) = −13 + 10 = −3 — negatif, mengikuti bilangan yang dibagi yang negatif, berbeda dari hasil floor +2 untuk input yang sama.
Kesalahan umum
- Mengasumsikan semua bahasa pemrograman menghitung a mod b dengan cara yang sama untuk bilangan negatif — JavaScript, C, C++ dan Java menggunakan modulo truncate, sedangkan Python dan banyak buku matematika menggunakan modulo floor, dan hasilnya berbeda setiap kali a bernilai negatif.
- Lupa bahwa hasil floor selalu memiliki tanda yang sama dengan pembagi, bukan bilangan yang dibagi — ini kebalikan dari yang diberikan konvensi truncate (gaya JavaScript).
- Mencoba menghitung a mod 0 — operasi modulo, seperti pembagian, tidak terdefinisi ketika pembagi bernilai nol.
- Menggunakan input non-bilangan bulat dan mengharapkan aritmetika modular gaya bilangan bulat — kalkulator ini menerima bilangan real dan menerapkan logika floor/truncate yang sama, tetapi banyak sifat aritmetika modular klasik (seperti aritmetika jam) didefinisikan khusus untuk bilangan bulat.
Pertanyaan yang sering diajukan
Apa perbedaan antara modulo floor dan truncate?
Modulo floor membulatkan hasil bagi menuju negatif tak hingga, sehingga sisa selalu bertanda sama dengan pembagi. Modulo truncate membulatkan hasil bagi menuju nol, sehingga sisa selalu bertanda sama dengan bilangan yang dibagi. Keduanya sama ketika kedua bilangan positif tetapi berbeda ketika salah satunya negatif — misalnya, −13 mod 5 adalah 2 menurut konvensi floor tetapi −3 menurut konvensi truncate.
Mengapa −13 mod 5 memberikan jawaban berbeda di kalkulator yang berbeda?
Ini bergantung pada konvensi tanda yang digunakan. Modulo floor memberikan 2 (hasil mengikuti tanda pembagi yang positif dan memenuhi 0 ≤ r < 5). Modulo truncate memberikan −3 (hasil mengikuti tanda bilangan yang dibagi yang negatif). Operator % Python mengembalikan 2 (floor); operator % JavaScript, C dan Java mengembalikan −3 (truncate). Tidak ada yang 'lebih benar' — keduanya adalah dua definisi matematis berbeda yang sama-sama sah.
Bagaimana cara menghitung a mod b secara manual?
Bagi a dengan b untuk mendapatkan hasil bagi, bulatkan sesuai konvensi yang Anda pilih (ke bawah untuk floor, menuju nol untuk truncate), lalu kurangkan b dikalikan hasil bagi yang telah dibulatkan tersebut dari a: sisa = a − b × hasil bagi. Untuk 13 mod 5: 13 ÷ 5 = 2,6, dibulatkan menjadi hasil bagi 2 dengan cara apa pun, sehingga sisa = 13 − 5×2 = 3.
Apa arti mod dalam aritmetika modular dan aritmetika jam?
Aritmetika modular memperlakukan bilangan sebagai 'berputar kembali' setelah mencapai modulus — contoh klasiknya adalah jam 12 jam, di mana waktu dihitung mod 12 (atau mod 24 untuk format 24 jam). Misalnya, pukul 15 dalam notasi 24 jam setara dengan 15 mod 12 = 3 pada jam berformat 12 jam. Modulo adalah operasi yang menghasilkan sisa 'berputar kembali' ini.
Bisakah mengambil modulo dari pembagi negatif?
Bisa. Menurut konvensi floor, a mod b (dengan b negatif) menghasilkan sisa dengan tanda yang sama seperti b — misalnya, 13 mod −5 = −2, karena 13 = (−3)×(−5) + (−2). Menurut konvensi truncate, sisa justru mengikuti tanda bilangan yang dibagi: 13 mod −5 = 3 pada truncate, karena hasil bagi dibulatkan menuju nol menjadi −2, memberikan 13 − (−5)×(−2) = 13 − 10 = 3.
Referensi
- Rosen KH. Elementary Number Theory and Its Applications. 6th ed. Pearson, 2010. (Division algorithm and modular arithmetic.)
- Leijen D. Division and Modulus for Computer Scientists. Utrecht University Technical Report UU-CS-2001-20, 2001. (Formal comparison of flooring, truncating and Euclidean division conventions.)
- ECMA International. ECMA-262: ECMAScript Language Specification — the remainder operator (%). ecma-international.org.