Modulo terlihat seperti operasi paling sederhana dalam pemrograman — hanya sisa setelah pembagian — hingga angka negatif muncul dan bahasa Anda tidak sesuai dengan angka di sebelahnya. Kalkulator ini menampilkan setiap jawaban sekaligus sehingga Anda selalu tahu konvensi mana yang sedang Anda lihat, dan menambahkan eksponensial modular untuk kriptografi dan kasus hashing di mana modulo benar-benar berfungsi.

Sisanya tidak unik — hasil bagi yang menentukannya

Pembagian bilangan bulat menghasilkan hasil bagi dan sisa yang dihubungkan oleh satu identitas: a = q·n + r. Masalahnya adalah persamaan tunggal ini memiliki lebih dari satu solusi bilangan bulat jika ada tanda-tanda yang terlibat. Tentukan cara membulatkan hasil bagi dan sisanya akan mengikuti secara otomatis.

Bulatkan hasil bagi menuju nol (pembagian terpotong) dan sisanya akan berakhir dengan tanda pembagian a. Bulatkan ke arah negatif tak terhingga (pembagian berlantai) dan sisanya diberi tanda pembagi n. Bersikeras bahwa sisanya non-negatif dan Anda akan mendapatkan konvensi Euclidean yang digunakan dalam matematika. Tidak ada satupun yang 'salah' — ketiganya merupakan jawaban yang konsisten secara internal terhadap pertanyaan yang benar-benar ambigu.

Mengapa JavaScript dan Python tidak setuju

-7 % 3 adalah -1 dalam JavaScript, C, C++, Java, Go, dan Rust, tetapi 2 dalam Python dan Ruby. Bahasa keluarga C distandarisasi pada pembagian terpotong beberapa dekade yang lalu, sehingga % mereka tetap mempertahankan tanda dividen. Perancang Python memilih pembagian bertingkat karena membuat % berperilaku baik untuk penggunaan nyata yang paling umum — membungkus indeks ke dalam rentang tetap — di mana Anda hampir selalu menginginkan hasil yang tidak negatif.

Ini sering menjadi sumber bug saat mem-porting kode atau memanggil melintasi batas bahasa. Pola seperti arr[i % len] aman di Python meskipun i negatif, tetapi di JavaScript pola ini dapat diindeks dengan angka negatif. Perbaikan portabelnya adalah dengan memaksakan hasil Euclidean secara eksplisit: ((i % len) + len) % len.

Dimana modulo sebenarnya penting: jam, hashing, dan kripto

Matematika menyeluruh. Jam (mod 12 atau 24), hari kerja (mod 7), dan sudut (mod 360) semuanya merupakan modulo Euclidean. Apa pun yang disikluskan adalah modulo yang menyamar.

Hashing dan penyeimbangan beban. Tabel hash menempatkan kunci di hash(key) mod numBuckets bucket. Karena hash sering kali ditandatangani, di sinilah letak bug sisa negatif — dan mengapa konvensi Euclidean adalah yang Anda inginkan untuk indeks keranjang yang valid.

Kriptografi. RSA dan Diffie-Hellman dibangun di atas eksponen modular: menaikkan suatu bilangan ke modulo pangkat yang besar dari suatu bilangan yang besar. Menghitung daya secara langsung tidak mungkin dilakukan (nilai antara akan memiliki banyak digit secara astronomis), sehingga metode kuadrat-dan-kalikan cepat mengurangi modulo m setelah setiap langkah. Tab Eksponensial Modular di kalkulator ini menjalankan algoritme yang sama persis melalui BigInt.