İşaret kurallarını anlamak
İki sayı da pozitif olduğunda iki kural aynı sonucu verir, ancak aşağıda gösterildiği gibi negatif bir değer söz konusu olduğunda birbirinden ayrılırlar.
| a | b | Taban kuralı sonucu (b'nin işareti) | Kesme kuralı sonucu (a'nın işareti) |
|---|---|---|---|
| 13 | 5 | 3 | 3 (aynı — ikisi de pozitif) |
| −13 | 5 | 2 | −3 |
| 13 | −5 | −2 | 3 |
| −13 | −5 | −3 | −3 (aynı — ikisi de negatif) |
- Taban kuralı (burada birincil sonuç olarak varsayılan şekilde kullanılır) saf matematik ve sayılar teorisinde en yaygın kuraldır ve Python'ın yerleşik % operatörüyle eşleşir.
- Kesme kuralı (ikincil sonuç olarak gösterilir) JavaScript, C, C++, Java ve çoğu C ailesi dildeki yerleşik % operatörüyle eşleşir; burada kalanın işareti bölüneni takip eder.
- Sıfıra göre modulo tanımsızdır ve bu hesaplayıcı tarafından hesaplanmaz; bölen sıfırdan farklı bir sayı olmalıdır.
Modulo işlemi nedir?
Modulo işlemi, a mod b (veya a % b) şeklinde yazılır ve a, b'ye bölündüğünde kalanı verir. Örneğin, 13 mod 5 = 3'tür, çünkü 13 = 2 × 5 + 3 — 13'ü 5'e bölmek, bölüm olarak 2 ve kalan olarak 3 verir. Modulo, sayılar teorisi (modüler/saat aritmetiği), bilgisayar bilimi (hashleme, döngüsel indeksleme, sağlama toplamları) ve kalanlar ile döngüler hakkındaki günlük akıl yürütme (haftanın günleri veya bir saat kadranındaki saatler gibi) için temeldir.
Negatif sayılar söz konusu olduğunda sonucun işaretini tanımlamak için yaygın olarak kullanılan iki matematiksel kural vardır: sonucun her zaman bölen b ile aynı işareti aldığı taban kuralı (floored modulo) ve sonucun her zaman bölünen a ile aynı işareti aldığı kesme kuralı (truncated modulo). Her ikisi de matematiksel olarak geçerli 'kalan' tanımlarıdır ve a ile b'nin ikisi de pozitif olduğunda tam olarak aynı sonucu verir; yalnızca negatif bir değer söz konusu olduğunda birbirinden ayrılırlar.
Bu kuralın seçimi pratikte önemlidir, çünkü farklı programlama dilleri farklı varsayılanlar uygular: Python'ın % operatörü taban kuralını kullanırken, JavaScript, C, C++, Java ve çoğu C ailesi dil kesme kuralını kullanır (bölünenin işaretiyle eşleşir). Bu hesaplayıcı her iki sonucu da açıkça bildirir, böylece istenen kural doğrudan okunabilir.
Bu modulo hesaplama aracı nasıl kullanılır
- Bölüneni (a) girin — bölünmekte olan sayı.
- Böleni (b) girin — kendisine böldüğünüz sayı. Bölen 0 olamaz, çünkü sıfıra bölme (ve modulo) tanımsızdır.
- Taban kuralına göre sonucu okuyun (işaret her zaman bölenle eşleşir) — sayılar teorisinde en yaygın kullanılan matematiksel kuraldır.
- Belirli bir programlama dilinin yerleşik % operatörüyle eşleşmeniz gerekiyorsa, kesme kuralına göre sonuçla (işaret her zaman bölünenle eşleşir) karşılaştırın ve çözülmüş bir döküm için bölümü ve tam bölme denklemini kontrol edin.
Taban ve kesme modulo formülleri
Taban kuralı, bölümü q = ⌊a ÷ b⌋ (aşağı, negatif sonsuza doğru yuvarlanmış) olarak tanımlar, ardından r = a − b×q hesaplanır. Bu, kalan r'nin her zaman bölen b ile aynı işarete sahip olmasını (veya 0 olmasını) garanti eder ve b > 0 olduğunda 0 ≤ r < |b| koşulunu sağlar. Çözülmüş örnek: 13 mod 5: q = ⌊13/5⌋ = 2, r = 13 − 5×2 = 3.
Negatif bir bölünenle çözülmüş örnek: −13 mod 5 (taban kuralı): q = ⌊−13/5⌋ = ⌊−2,6⌋ = −3, r = −13 − 5×(−3) = −13 + 15 = 2. Sonucun pozitif olduğuna dikkat edin (pozitif bölenle eşleşir), bu da aşağıdaki kesme kuralı sonucundan farklıdır.
Kesme kuralı, bölümü negatif sonsuza doğru değil, sıfıra doğru yuvarlayarak tanımlar, ardından kalanı aynı şekilde hesaplar; bu, kalanın her zaman bölünen a ile aynı işarete sahip olmasını (veya 0 olmasını) garanti eder. Çözülmüş örnek: −13 mod 5 (kesme kuralı, JavaScript/C/Java'nın % sonucu): bölüm, −2,6'yı sıfıra doğru yuvarlayarak −2 olur, dolayısıyla r = −13 − 5×(−2) = −13 + 10 = −3 — negatif, negatif bölünenle eşleşir, aynı girdiler için taban kuralının +2 sonucundan farklı olarak.
Sık yapılan hatalar
- Tüm programlama dillerinin negatif sayılar için a mod b'yi aynı şekilde hesapladığını varsaymak — JavaScript, C, C++ ve Java kesme kuralını kullanırken, Python ve birçok matematik metni taban kuralını kullanır ve a negatif olduğunda sonuçlar farklılaşır.
- Taban kuralı sonucunun her zaman bölünenin değil, bölenin işaretini paylaştığını unutmak — bu, kesme (JavaScript tarzı) kuralının verdiğinin tam tersidir.
- a mod 0'ı hesaplamaya çalışmak — modulo işlemi, bölme gibi, bölen sıfır olduğunda tanımsızdır.
- Tam sayı olmayan girdiler kullanıp tam sayı tarzı modüler aritmetik beklemek — bu hesaplayıcı gerçek sayıları kabul eder ve aynı taban/kesme mantığını uygular, ancak klasik modüler aritmetik özelliklerinin çoğu (saat aritmetiği gibi) özellikle tam sayılar için tanımlanmıştır.
Sıkça Sorulan Sorular
Taban kuralı ile kesme kuralı arasındaki fark nedir?
Taban kuralı bölümü negatif sonsuza doğru yuvarlar, dolayısıyla kalan her zaman bölenle aynı işarete sahiptir. Kesme kuralı bölümü sıfıra doğru yuvarlar, dolayısıyla kalan her zaman bölünenle aynı işarete sahiptir. İki sayı da pozitif olduğunda aynı sonucu verirler, ancak herhangi biri negatif olduğunda farklılaşırlar — örneğin, −13 mod 5, taban kuralında 2, kesme kuralında ise −3'tür.
−13 mod 5 neden farklı hesaplayıcılarda farklı sonuçlar veriyor?
Bu, hangi işaret kuralının kullanıldığına bağlıdır. Taban kuralı 2 verir (sonuç pozitif bölenin işaretiyle eşleşir ve 0 ≤ r < 5 koşulunu sağlar). Kesme kuralı −3 verir (sonuç negatif bölünenin işaretiyle eşleşir). Python'ın % operatörü 2 döndürür (taban kuralı); JavaScript'in, C'nin ve Java'nın % operatörleri −3 döndürür (kesme kuralı). Hiçbiri 'daha doğru' değildir — bunlar iki farklı, eşit derecede geçerli matematiksel tanımdır.
a mod b elle nasıl hesaplanır?
Bölümü elde etmek için a'yı b'ye bölün, seçtiğiniz kurala göre yuvarlayın (taban kuralı için aşağı, kesme kuralı için sıfıra doğru), ardından a'dan b çarpı yuvarlanmış bölümü çıkarın: kalan = a − b × bölüm. 13 mod 5 için: 13 ÷ 5 = 2,6, her iki kuralda da bölüm 2'ye yuvarlanır, dolayısıyla kalan = 13 − 5×2 = 3.
Modüler aritmetik ve saat aritmetiğinde mod ne anlama gelir?
Modüler aritmetik, sayıları modülüne ulaştıktan sonra 'başa sararak devam ediyormuş' gibi ele alır — klasik örnek, zamanın mod 12 (veya 24 saatlik zaman için mod 24) hesaplandığı 12 saatlik bir saattir. Örneğin, 24 saatlik gösterimde saat 15, 12 saatlik bir saat kadranında 15 mod 12 = 3'e karşılık gelir. Modulo, bu 'sarılmış' kalanı üreten işlemdir.
Negatif bir bölenin modülosunu alabilir misiniz?
Evet. Taban kuralında, a mod b (b negatif olduğunda) b ile aynı işarete sahip bir kalan üretir — örneğin, 13 mod −5 = −2'dir, çünkü 13 = (−3)×(−5) + (−2). Kesme kuralında ise kalan bunun yerine bölünenin işaretiyle eşleşir: kesme kuralında 13 mod −5 = 3'tür, çünkü bölüm sıfıra doğru yuvarlanarak −2 olur ve bu da 13 − (−5)×(−2) = 13 − 10 = 3 verir.
Kaynaklar
- 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.