Dijital bilgisayarlarda bölünme nasıl gerçekleşir? Bunun için algoritma nedir?
Google'da çok araştırdım, ancak tatmin edici sonuçlar almadım. Lütfen örnek bir resme sahip bölme algoritması için çok açık bir algoritma / akış şeması sağlayın .
Dijital bilgisayarlarda bölünme nasıl gerçekleşir? Bunun için algoritma nedir?
Google'da çok araştırdım, ancak tatmin edici sonuçlar almadım. Lütfen örnek bir resme sahip bölme algoritması için çok açık bir algoritma / akış şeması sağlayın .
Yanıtlar:
Dijital tasarımlarda bölüm algoritmaları iki ana kategoriye ayrılabilir. Yavaş bölme ve hızlı bölme.
Bu kavramlara henüz aşina değilseniz ikili toplama ve çıkarma işlemlerinin nasıl çalıştığını okumanızı öneririm.
Yavaş Bölüm
En basit yavaş yöntemlerin tümü şu şekilde çalışır: Paydayı paydan çıkarın. Kalan paydadan daha az olana kadar her çıkartmanın sonucu ile bunu tekrarlayın. Yineleme miktarı tamsayı bölümüdür ve kalan miktar kalanıdır.
Misal:
03/07:
Böylece cevap 2'dir ve geri kalanı 1'dir. Bu cevabı biraz daha alakalı hale getirmek için, bazı arka plan. Negatif eklenerek ikili çıkarma yapılır, örneğin: 7 - 3 = 7 + (-3). Bu, ikisinin tamamlayıcısı kullanılarak gerçekleştirilir. Her ikili sayı bir dizi tam toplayıcı kullanılarak eklenir:
Her 1 bitlik tam toplayıcının aşağıdaki gibi uygulandığı yerlerde:
Hızlı Bölüm
Daha yavaş bölme yöntemini anlamak kolay olsa da, tekrarlayan yinelemeler gerektirir. Çeşitli "hızlı" algoritmalar vardır, ancak hepsi tahmine dayanır.
Goldschmidt yöntemini düşünün:
Aşağıdakilerden faydalanacağım:
Bu yöntem aşağıdaki gibi çalışır:
Bu yöntem, modern AMD CPU'larda da kullanılan yinelemeli toplama yoluyla ikili çarpmayı kullanır.
Kayan nokta bölme donanımı, çarpma işlemi yapan bir mantık biriminin bir parçasıdır; bir çarpan donanım modülü mevcuttur. Kayan nokta sayıları, örneğin A ve B, aşağıdakilere bölünür (A / B oluşturan)
mantisler (sayıların ikili rakamları) 1/2 ve 1 arasında sabit noktalı bir ikili sayıdır; Bu, ikili noktadan sonraki ilk basamağın '1', ardından sıfırlar ve birler olduğu anlamına gelir ... bir ilk adım olarak, bir arama tablosu karşılıklılığı altı bite doğru bulur (sadece 32 olasılık vardır, küçük bir tablo)
İlginç bir şekilde, eski Pentium bölme hatası (1994'te çok haber değeri olan), adım (4) için hatalı karşılıklı tablo değerleri yapan bir yazdırma hatasından kaynaklandı. Erken bir makale, "Paralel Çarpan Kullanan Bir Bölme Yöntemi", Domenico Ferrari, IEEE Trans. Elektron. Comput. EC-16 / 224-228 (1967), yöntemi "IBM System / 360 Model 91: Kayan Nokta Yürütme Birimi" gibi IBM J. Res. Dev. 11 : 34-53 (1967) 'de tarif edilmiştir.
İşlenecek sayılara bağlı olarak çok farklı bölme yöntemleri vardır. Tamsayılar için, başkaları tarafından verilen shift-and-çıkart yöntemi iyi çalışır. Bununla birlikte, kayan nokta sayıları için, ilk önce paydanın karşılıklı değerini hesaplamak ve sonra o zaman payınızı çarpmak daha hızlı olabilir.
Paydanın karşılıklı hesaplanması o kadar da kötü değil; birbirini izleyen yaklaşımları geliştirerek yapılır. G, 1 / d için tahmininiz olsun. Geliştirilmiş bir tahmin için g '= g (2-gd) kullanın. Bu, karesel olarak birleşir, böylece her iyileştirmedeki hassasiyet basamaklarını ikiye katlarsınız.
Örnek: 3.5 karşılıklarını hesaplar.
İlk tahmininiz 0.3. 0.3 * 3.5 = 1.15 hesaplayın. Ayarlanan tahmininiz 0.3 * (2 - 1.15) = 0.285'dir. Zaten oldukça yakın! İşlemi tekrarlayın ve 0.2857125 ve üçüncü bir deneme 0.2857142857 alırsınız.
Bazı kısayollar var. Kayan noktada, makinenizin sayı tabanına bağlı olarak on veya ikiden oluşan güçleri ayıklayabilirsiniz. Daha fazla bellek kullanımı pahasına hız için, gerekli karşılıklılığa hemen yakın olan bir tahminde bulunmak için 1 ila b arasındaki sayılar için (burada b sayı tabanınızdır) önceden hesaplanmış bir tablo kullanabilirsiniz. bir veya iki ayrıntılandırma adımı kaydedin.
Çarpma ve Kolmogorov'un öğrencisi Anatoly Karatsuba'nın 1960 utancında olduğu gibi, daha hızlı veya daha iyi bir yöntemin ne zaman bulunacağını asla bilemeyeceğinizi unutmayın. Merakınızı asla teslim etmeyin.
Bilgisayarlar sayıları çoğaltmak için yinelemeli bir ekleme yapmaz - gerçekten yavaş olur. Bunun yerine, bazı hızlı çarpma algoritmaları vardır. Kontrol et: http://en.wikipedia.org/wiki/Karatsuba_algorithm