Bagaimana pembagian terjadi di dalam komputer digital? Apa algoritma untuk itu?
Saya telah mencari dengan keras di google tetapi belum mendapatkan hasil yang memuaskan. Harap berikan sangat jelas algoritma / flowchart untuk algoritma pembagian dengan ilustrasi sampel.
computers
tutorial
arithmetic-division
Program-o-steve
sumber
sumber
Jawaban:
algoritma divisi dalam desain digital dapat dibagi menjadi dua kategori utama. divisi lambat dan divisi cepat.
Saya sarankan Anda membaca tentang bagaimana biner penambahan dan pengurangan pekerjaan jika Anda belum terbiasa dengan konsep-konsep ini.
Divisi lambat
Metode lambat sederhana semua pekerjaan dengan cara berikut: Kurangi denominator dari pembilang. Lakukan ini secara rekursif dengan hasil masing-masing pengurangan sampai sisanya kurang dari penyebut. Jumlah iterasi adalah hasil bagi bilangan bulat, dan jumlah yang tersisa adalah sisanya.
Contoh:
7/3:
Jadi jawabannya adalah 2 dengan sisa 1. Untuk membuat jawaban ini sedikit lebih relevan, di sini adalah beberapa latar belakang. pengurangan biner melalui penambahan negatif dilakukan misalnya: 7-3 = 7 + (-3). Hal ini dicapai dengan menggunakan komplemen dua nya. Setiap angka biner ditambahkan menggunakan serangkaian penambah penuh:
Di mana setiap 1-bit penambah penuh akan dilaksanakan sebagai berikut:
Divisi cepat
Sedangkan metode lebih lambat dari divisi mudah dimengerti, membutuhkan iterasi berulang-ulang. Ada ada berbagai "cepat" algoritma, tetapi mereka semua bergantung pada estimasi.
Mempertimbangkan metode Goldschmidt:
Saya akan menggunakan yang berikut ini:Q = ND
Metode ini berfungsi sebagai berikut:
Metode ini menggunakan perkalian biner melalui penambahan berulang, yang juga digunakan di zaman modern AMD CPU.
sumber
Hardware untuk divisi floating point merupakan bagian dari unit logika yang juga melakukan perkalian; ada modul hardware multiplier yang tersedia. Angka floating point, mengatakan A dan B, dibagi (membentuk A / B) oleh
Mantisa (biner digit nomor) adalah bilangan biner fixed-point antara 1/2 dan 1; itu berarti bahwa digit pertama setelah titik biner adalah '1', diikuti oleh nol dan satu ... sebagai langkah pertama, tabel pencarian menemukan timbal balik akurat hingga enam bit (hanya ada 32 kemungkinan, ini adalah meja kecil)
Menariknya, bug pembagian Pentium lama (sangat bernilai berita pada tahun 1994) disebabkan oleh kesalahan pencetakan yang membuat nilai tabel timbal balik yang salah untuk langkah (4). Kertas awal, "Sebuah Metode Divisi Menggunakan Multplier Paralel", Domenico Ferrari, IEEE Trans. Elektron. Comput. EC-16 / 224-228 (1967), menjelaskan metode ini, seperti halnya "Sistem IBM / Model 360 91: Unit Eksekusi Floating-Point" IBM J. Res. Dev. 11 : 34-53 (1967).
sumber
Ada beberapa metode yang sangat berbeda untuk divisi, tergantung pada nomor yang akan ditangani. Untuk bilangan bulat, metode shift-dan-kurangi diberikan oleh orang lain akan bekerja dengan baik. Untuk angka floating point, bagaimanapun, mungkin lebih cepat untuk menghitung pertama kebalikan dari penyebut dan kemudian kalikan bahwa kali pembilang Anda.
Perhitungan kebalikan dari penyebut tidak begitu buruk; ini dilakukan dengan menyempurnakan pendekatan yang berurutan. Biarkan g menjadi tebakan Anda untuk 1 / d. Untuk perkiraan yang lebih baik, gunakan g '= g (2-gd). Ini menyatu secara kuadrat, sehingga Anda menggandakan digit presisi pada setiap peningkatan.
Contoh: hitung kebalikan dari 3,5.
Tebakan awal Anda adalah 0,3. Anda menghitung 0,3 * 3,5 = 1,15. Dugaan Anda disesuaikan adalah 0,3 * (2-1,15) = 0,285. Sudah cukup dekat! Ulangi proses, dan Anda mendapatkan 0.2857125, dan ketiga mencoba mendapat ,2857142857.
Ada beberapa jalan pintas. Dalam floating point, Anda dapat mengekstrak kekuatan sepuluh atau kekuatan dari dua, tergantung pada dasar jumlah mesin Anda. Dan, untuk kecepatan dengan mengorbankan penggunaan memori yang lebih besar, Anda dapat menggunakan tabel pra-dihitung untuk angka dalam kisaran 1 sampai b (di mana b adalah bilangan basis Anda) untuk mendapatkan menebak bahwa segera dekat dengan yang dibutuhkan timbal balik dan simpan satu atau dua langkah penyempurnaan.
Perlu diingat bahwa, seperti dengan perkalian dan Kolmogorov 1960 malu oleh muridnya Anatoly Karatsuba, Anda tidak pernah tahu kapan metode yang lebih cepat atau lebih baik akan ditemukan. Jangan pernah menyerahkan rasa ingin tahu Anda.
sumber
Komputer tidak melakukan penambahan berulang ke nomor kalikan - itu akan sangat lambat. Sebagai gantinya, ada beberapa algoritma multiplikasi cepat. Periksa: http://en.wikipedia.org/wiki/Karatsuba_algorithm
sumber