İki ile bölme

Matematikte, **iki ile bölme**, **ikiye bölme** veya **yarılama** işlemi tarihsel olarak **medyasyon** (*mediation*) veya **dimidasyon** (*dimidiation*) olarak da adlandırılmıştır. Bunun çarpma ve diğer sayılara bölme işlemlerinden farklı bir işlem olarak ele alınması, çarpma algoritmalarının temel adımlarından biri olarak ikiye bölmeyi kullanan eski Mısırlılara kadar uzanır.
On altıncı yüzyıla kadar bazı matematikçiler yarılama (*halving*) işlemini ayrı bir işlem olarak görmeye devam etmişlerdir ve modern bilgisayar programlamada da bu işlem genellikle ayrı bir şekilde ele alınmaya devam etmektedir.

Bu işlemi gerçekleştirmek onluk aritmetikte, bilgisayar programlamada kullanılan ikili sayı sisteminde ve diğer çift tabanlı tabanlarda basittir.
Bir tek sayıyı 2'ye bölmek için ((N−1)÷2)+0.5 matematiksel çözüm kullanılabilir.

Örneğin, N=7 ise, o zaman ((7−1)÷2)+0.5=3.5 olur, yani 7÷2=3.5'tir.

## İkili
İkili aritmetikte, ikiye bölme işlemi, sayıyı bir basamak sağa kaydıran bir bit kaydırma işlemi ile gerçekleştirilebilir.
Bu bir güç azaltma (*strength reduction*) optimizasyonu biçimidir. Örneğin, ikili sistemdeki 1101001 (onluk sayı olarak 105), bir basamak sağa kaydırıldığında 110100 (onluk sayı olarak 52) olur: en düşük değerlikli bit olan 1 atılır.

Benzer şekilde, herhangi bir 2*k* ikinin kuvvetine bölme işlemi, *k* pozisyon sağa kaydırma yapılarak gerçekleştirilebilir.
Bit kaydırma işlemleri genellikle bölme işleminden çok daha hızlı olduğundan, bir bölme işleminin bu şekilde bir kaydırma işlemi ile değiştirilmesi program optimizasyonunda yararlı bir adım olabilir. Ancak, yazılım taşınabilirliği ve okunabilirliği adına, programları bölme işlemi kullanarak yazmak ve bu değişimi gerçekleştirmesi için derleyiciye güvenmek genellikle en iyisidir. 

Common Lisp'ten bir örnek aşağıda verilmiştir:


```lisp
(setq number #b1101001)   ;
 #b1101001  —  105
 (ash number -1)           ;
 #b0110100  —  105 >> 1 ⇒ 52
 (ash number -4)           ;
 #b0000110  —  105 >> 4 ≡ 105 / 2⁴ ⇒ 6
```


Ancak yukarıdaki ifadeler, işaretli ikili sayıların bölünmesi söz konusu olduğunda her zaman doğru değildir.
1 bit sağa kaydırmak, her zaman aşağı yuvarlayarak ikiye böler.
Ancak bazı dillerde, işaretli ikili sayıların bölünmesi 0'a doğru yuvarlanır (bu da sonuç negatifse yukarı yuvarlanacağı anlamına gelir).

Örneğin, Java böyle bir dildir: Java'da, `-3 / 2` ifadesi `-1` olarak değerlendirilirken, `-3 >> 1` ifadesi `-2` olarak değerlendirilir.
Bu durumda, bölünen sayının negatif olma ihtimali varsa, derleyici ikiye bölme işlemini bir bit kaydırma işlemiyle değiştirerek optimize *edemez*.

## İkili kayan nokta
İkili kayan nokta aritmetiğinde, ikiye bölme işlemi, üssü bir azaltarak gerçekleştirilebilir (sonuç bir altnormal sayı olmadığı sürece).
Birçok programlama dili, bir kayan noktalı sayıyı ikinin kuvvetine bölmek için kullanılabilecek fonksiyonlar sağlar.
Örneğin, Java programlama dili, ikinin bir kuvvetiyle ölçeklendirme yapmak için `java.lang.Math.scalb` metodunu sağlar ve C programlama dili aynı amaç için `ldexp` fonksiyonunu sağlar.

## Onlu
Aşağıdaki algoritma onlu sayı sistemi içindir.
Ancak bu, herhangi bir çift tabanda herhangi bir *N* sayısının yarısını almak için bir algoritma oluşturmak üzere bir model olarak kullanılabilir.
**N* sayısını yazın ve soluna bir sıfır koyun.
**N* sayısının basamaklarını örtüşen çiftler halinde inceleyin ve aşağıdaki tablodan sonucun basamaklarını yazın.

Örneğin, 1738/2 işlemini çözmek için, önce 01738 yazılabilir.

Ardından sonucu bulmak için aşağıdaki adımlar takip edilebilir.
* 01: çift basamağı takiben 1, 0 yaz.
* 17: tek basamağı takiben 7, 8 yaz.
* 73: tek basamağı takiben 3, 6 yaz.
* 38: tek basamağı takiben 8, 9 yaz.

Sonuç: 0869 olur.

Örnekten 0'ın çift olduğu görülebilir.
Eğer *N* sayısının son basamağı tek ise sonuca 0.5 eklenmelidir.

## Ayrıca bakınız
*Yarım (Bir bölü iki)
*Medyan, bir veri setini iki eşit alt kümeye bölen değer
*Biseksiyon, bir geometrik nesnenin iki eşit yarıya bölünmesi
*Dimidasyon, iki armayı tasarımlarını yarılara bölerek birleştirme yöntemi

## Kaynakça