Toplama
Toplama işlemi yapma > Bilgisayarlar

Analog bilgisayarlar fiziksel ölçümlerle doğrudan etkileşime girerler, dolayısıyla toplama işlemleri, eklenen değerlerin niteliklerine bağlı olarak değişiklik gösterir. Mekanik bir toplama cihazı, eklenen iki değeri kayar blokların pozisyonları olarak ifade edebilir; bu durumda, ortalama değer hesaplama yöntemi olan bir kaldıraç ile toplama işlemi yapılabilir. Eğer eklenen değerler iki milin dönüş hızları ise, bir diferansiyel aracılığıyla toplanabilirler. Hidrolik bir toplama birimi, iki kompartımandaki basınç değerlerini, bir dizi piston üzerindeki kuvvetlerin dengelenmesi sürecinde Newton'un ikinci yasasını kullanarak hesaplayabilir. Genel amaçlı bir analog bilgisayarın karşılaştığı en sık durum, iki voltajın (toprak referans alınarak) toplanmasıdır; bu işlem genellikle bir direnç ağı ile gerçekleştirilse de, daha etkili bir yöntem operasyonel bir yükselteç kullanmaktır.
Toplama işlemi, özellikle taşıma mekanizmasının etkinliği bakımından, dijital bilgisayarların işlevselliği için temel bir bileşendir ve bu işlemin verimliliği, genel performans üzerinde belirleyici bir faktördür.
Abaküs, aynı zamanda hesaplama çerçevesi olarak bilinen, yazılı modern sayı sistemi benimsenmeden yüzyıllar önce kullanılmaya başlanmış bir hesaplama aracıdır ve hâlâ Asya, Afrika ve diğer bölgelerde tüccarlar tarafından geniş çapta kullanılmaktadır; bu araç MÖ 2700–2300 yılları arasında, Sümer'de kullanılmaya başlandığı dönemlere dayanmaktadır.
Blaise Pascal, 1642 yılında mekanik bir hesap makinesi geliştirmiştir; bu cihaz, ilk işlevsel toplama makinesi olarak kaydedilmiştir. Bu cihaz, yer çekimini kullanarak çalışan bir taşıma mekanizması içermekteydi. Bu makine, 17. yüzyılda işlevsel olan tek mekanik hesap makinesi olup, aynı zamanda en eski otomatik dijital bilgisayar olarak kabul edilmektedir. Pascal'ın hesap makinesi, yalnızca bir yöne dönebilmesine izin veren taşıma mekanizması nedeniyle sınırlıydı; bu, makinenin yalnızca toplama işlemi yapabilmesine olanak tanıyordu. Çıkarma işlemi gerçekleştirmek için operatör, Pascal hesap makinesinin tamamlayıcısını kullanmak zorundaydı, bu işlem toplama kadar çok sayıda adım gerektirmekteydi. Giovanni Poleni, Pascal'ı izleyerek, 1709 yılında inşa edildikten sonra iki sayıyı otomatik olarak çarpan, ahşap malzemeden yapılmış bir hesap saatini tasarlamıştır.
Toplayıcılar, elektronik dijital bilgisayarlarda, genellikle ikili aritmetik temelinde tam sayı toplama işlemi uygular. En temel yapı, çok basamaklı standart algoritmayı izleyen dalga taşıma toplayıcısıdır. Bir miktar iyileştirilmiş bir yapı olan taşıma atlama tasarımı (İng. carry bypass adder), yine insan sezgisine dayalıdır; 999 + 1 işlemi gerçekleştirilirken tüm taşıma işlemleri yapılmaz, 9'lar grubu göz ardı edilir ve doğrudan sonuca ulaşılır.
Uygulamalı olarak, hesaplama temelli toplama işlemleri, aşağıdaki kodda gösterildiği üzere XOR ve AND bit düzeyinde mantıksal işlemler ile bit kaydırma operasyonlarının birleştirilmesiyle sağlanabilir. XOR ve AND kapılarının dijital mantıkta kolayca gerçekleştirilebilir olması, bu kapıların tam toplayıcı devrelerinin oluşturulmasını mümkün kılar; bu devreler daha karmaşık mantıksal işlemler için birleştirilebilir. Çağdaş dijital bilgisayarlarda, tam sayı toplama işlemi tipik olarak en hızlı aritmetik işlemdir, ancak kayan nokta işlemleri ve bellek erişimi sırasında adres üretimi ile dal sırasında talimat yüklemesi gibi temel görevlerin altında yattığı için performans üzerinde büyük bir etkiye sahiptir. Hızı artırmak amacıyla, modern tasarımlar rakamları paralel olarak hesaplar; bu yöntemler taşıma seçimi, taşıma öngörme ve Ling sahte taşıma gibi isimler altında bilinir. Bu uygulamaların birçoğu, aslında bu son üç tasarımın bir karışımıdır. Kağıt üzerindeki toplamadan farklı olarak, bilgisayarda yapılan toplama işlemi genellikle toplanan değerleri değiştirir. Antik abaküs ve toplama tahtasında, her iki toplanan değer de yok edilir, sadece sonuç baki kalır. Abaküsün matematiksel düşünce üzerindeki derin etkisi, erken Latin metinlerinde sıkça "bir sayıya bir sayı eklenmesi" sürecinde her iki sayının da yok olduğu iddiasına neden olmuştur. Modern dönemde, bir mikroişlemcinin ADD komutu çoğunlukla artanı toplamla değiştirirken, toplananı muhafaza eder. Yüksek seviye bir programlama dilinde, a + b işlemi a veya byi değiştirmez; eğer hedef a'yı toplamla değiştirmekse, bu genellikle a = a + b ifadesiyle açıkça talep edilmelidir. Bazı diller, örneğin C veya C++, bu işlemi a += b şeklinde kısaltmaya izin verir.
// İteratif algoritma
int add(int x, int y) {
    int carry = 0;
    while (y != 0) {      
        carry = AND(x, y);   // Logical AND
        x     = XOR(x, y);   // Logical XOR
        y     = carry << 1;  // left bitshift carry by one
    }
    return x; 
}

// Tekrarlamalı algoritma
int add(int x, int y) {
    return x if (y == 0) else add(XOR(x, y), AND(x, y) << 1);
}
Bilgisayar sistemlerinde, bir toplama işlemi sonucunda elde edilen değer, saklama alanını aşarsa, aritmetik taşma meydana gelir ve bu durum yanıltıcı bir sonuç üretir. Beklenmedik aritmetik taşmalar, yazılım hatalarının oldukça sık rastlanan bir sebebidir. Bu tür taşma hataları, yalnızca büyük boyutlu girdi veri kümeleri için meydana geldiğinden ve doğrulama testlerinde bu tür veri kümelerinin kullanım olasılığı düşük olduğundan, keşfedilmeleri ve tanımlanmaları zor olabilir. 2000 Yılı Sorunu, yılların iki haneli bir formatla ifade edilmesi nedeniyle ortaya çıkan taşma hatalarından oluşan bir dizi sorundur.