Ini adalah pertanyaan yang bagus karena memahami algoritma dan kinerja numerik merupakan prasyarat penting untuk menjadi ilmuwan komputasi yang efektif. Pada saat yang sama, ini adalah pertanyaan yang buruk karena kendala yang diajukan tidak cukup memenuhi syarat untuk memberikan jawaban yang bermakna.
Kinerja ketiga perhitungan akan sangat bergantung pada keakuratan yang dibutuhkan dalam hasil akhir serta ketepatan minimum yang diperlukan untuk merepresentasikan operan. Anda memenuhi syarat , , dan sebagai bilangan real positif, tapi kami juga perlu tahu berapa banyak angka biner diperlukan untuk mewakili mereka secara akurat. Untuk memahami pertimbangan kinerja untuk bilangan real umum, pertama-tama kita harus memahami bagaimana komputer mewakili bilangan bulat serta bagaimana perkiraan bilangan real menggunakan angka floating-point.b c d nSebuahbcdn
Ketika komputer beroperasi pada integer , maka jumlah digit biner yang dibutuhkan jelas sama dengan log dari besarnya integer, ditambah bit tambahan untuk menangani tanda:2M.2
2 | M | + 1dn= log2| M.| +1
Misalnya, angka -8 dapat direpresentasikan dengan 4 digit biner. Untuk kinerja dan efisiensi ruang, arithmetic logic units (ALUs), yang bertanggung jawab untuk perhitungan numerik bilangan bulat pada unit pemrosesan modern, dirancang untuk menangani matematika pada bilangan bulat hingga beberapa ukuran tetap, yang paling umum saat ini adalah d = 32 dan d = 64. Bukan hanya prosesor x86 seperti di komputer Anda yang memiliki ALU, mereka adalah blok bangunan dasar arsitektur komputer di mana-mana dalam masyarakat elektronik saat ini. Jika Anda terbiasa dengan konsol video game, Anda mungkin ingat Nintendo 64, sistem video game yang diberi nama sesuai ukuran (dalam bit), unit logika aritmatika pada prosesor konsol dirancang untuk menangani.
Penambahan, pengurangan, dan perkalian bilangan bulat pada unit logika aritmatika sangat efisien, dan biasanya tidak memerlukan lebih dari beberapa siklus untuk dihitung. Divisi kurang berkinerja, dan pada prosesor modern dapat memerlukan sebanyak beberapa lusin siklus. Kinerja tergantung pada arsitektur unit pemrosesan (dan implementasi yang sesuai dari unit logika aritmatika) dan frekuensinya. Perhatikan bahwa prosesor 64-bit biasanya dapat melakukan aritmatika pada operan bit pada kecepatan yang sama untuk mana saja antara 1 dan 64.xxx
Dalam komputasi umum, dan terutama dalam komputasi ilmiah, matematika bilangan bulat sangat sulit untuk banyak komputasi, dan diperlukan representasi angka lainnya, yang disebut representasi 'floating-point'. Angka floating-point mewakili kompromi antara cara kerja mikroprosesor modern (pengangkutan data sekitar dalam bit bakhil) dan kebutuhan perhitungan dengan mewakili angka pada prosesor dalam notasi ilmiah terpotong, menggunakan basis tetap (biasanya atau ) dan mewakili jumlah menggunakan dua bilangan bulat, sebuah mantissa (significand di beberapa kalangan) , dan eksponen . Angka diberikan kemudian kira-kira direpresentasikan sebagai:b b = 2 b = 10 s e xnbb = 2b = 10sex
x = s ∗ be
Saya katakan kira-kira karena harus jelas bahwa bahkan rasional sederhana seperti tidak dapat direpresentasikan secara tepat sebagai angka titik-mengambang untuk basis standar. Jumlah digit yang dikomit untuk signifikan dan menentukan akurasi angka, yang relatif terhadap besarnya sendiri. Standar IEEE 754 menetapkan sejumlah aturan untuk bagaimana angka floating-point diharapkan untuk berperilaku, termasuk rentang signifikan dan mantissa (dan rentang serta presisi yang sesuai) untuk beberapa nilai penting , sehingga perhitungan numerik dapat diulang dalam beberapa toleransi. Ada sedikit kehalusan tentang bagaimana angka floating-point bekerja yang saya tidak bisa berharap untuk menangkap dalam jawaban ini, untuk pengantar yang bagus saya sarankan dn13dn"Apa Yang Harus Diketahui Setiap Ilmuwan Mengenai Aritmatika Titik Apung" .
Sejumlah besar upaya intelektual selama 50 tahun terakhir telah diinvestasikan dalam meningkatkan kemampuan prosesor untuk menghitung operasi floating-point aritmatika secara efisien. Pada prosesor modern, perhitungan ini ditangani oleh satu atau lebih Floating-point units (FPUs), versi yang lebih canggih dari unit logika aritmatika yang dirancang untuk melakukan operasi aritmatika pada angka floating-point dan biasanya dirancang untuk menangani kedua IEEE 754 yang ditentukan 32 -bit-point floating-point (sering disebut sebagai 'floats') dan 64-bit floating-point number (sering disebut sebagai 'doubles') secara efisien. Mirip dengan unit logika aritmatika, unit floating-point sering dapat menghitung penjumlahan, pengurangan, dan penggandaan hanya dalam beberapa siklus, sedangkan pembagian biasanya membutuhkan sedikit lebih banyak.
abc
- ab
- ac
- c1b
1 Eksponen umum sering diterapkan dengan identitas berikut:
ab=βa⋅logβb
β2eβ=2abt=a⋅log2b2t
FYL2X + F2XM1 + ~ 20 = 80 + 51 + ~ 20 = ~ 151 siklus
2 Ini dapat ditransformasikan menjadi dua logaritma dan pembagian dengan mengubah identitas basis dan tidak perlu pensaling ulang untuk hasil yang akurat.
2 * FYL2X + FDIV = 2 * 80 + (7 hingga 27) = 167 hingga 187 siklus
[3] Ini setara dengan divisi yang diikuti oleh eksponensial, jadi [1] ditambah FDIV, ~ 175 siklus.