Angka titikapung
| English | Bahasa Indonesia |
|---|---|
| floating-point/ˈfləʊtɪŋ pɔɪnt/ | titik mengambang |
| mantissa/mænˈtɪsə/ | mantissa |
| exponent/ekˈspəʊnənt/ | eksponen |
| normalised/ˈnɔːməlaɪzd/ | dinormalisasi |
| precision/prɪˈsɪʒn/ | presisi |
| rounding errors/ˈraʊndɪŋ ˈerəz/ | kesalahan pembulatan |
| fixed-point/fɪkst pɔɪnt/ | titik tetap |
| overflow/ˌəʊvəˈfləʊ/ | overflow |
| underflow/ˌʌndəˈfləʊ/ | underflow |
Rudal yang meleset 600 meter
- Pada 25 Februari 1991, baterai Patriot di Dhahran gagal Intercept rudal yang mendekat. Dua puluh delapan prajurit tewas.
- Sistem menghitung waktu dalam persepuluh detik, dan 0.1 tidak memiliki representasi biner yang eksak: itu adalah pecahan berulang, dipotong sesuai lebar register. Setiap detak kehilangan sebagian mikrodetik.
- Setelah seratus jam berjalan, akumulasi kesalahannya adalah sepertiga detik, dan dalam sepertiga detik target bergerak 600 meter. Perhitungan benar pada setiap langkahnya.
- Pelajaran ini adalah format floating-point, normalisasi, dan kesalahan aproksimasi yang memungkinkan kasus seperti ini.
Format
- Untuk menyimpan bilangan riil dengan ukuran sangat berbeda, komputer menggunakan bentuk biner notasi ilmiah dengan dua bidang: mantissa, digit signifikan, dan eksponen, pangkat 2 untuk dikalikan. Keduanya disimpan sebagai complement dua.
- Baca mantissa sebagai pecahan biner: bit pertama setelah titik bernilai $\tfrac12$, berikutnya $\tfrac14$, lalu $\tfrac18$. Jadi
0.1010000adalah $\tfrac12 + \tfrac18 = 0.625$. - Dengan eksponen
00000010, yaitu $+2$, nilainya adalah $0.625 \times 2^2 = 2.5$.

Pecahan dan pangkat dua
Membangun angka titikapung
Balik bit mantissa dan eksponen untuk membuat nilai, dan periksa apakah itu dinormalisasi.
Angka titikapung disimpan sebagai:
nilai = mantissa × 2^eksponen — notasi ilmiah biner, dengan kedua bagian disimpan dalam komplemen dua.
Pasangkan setiap bagian representasi titikapung dengan perannya.
nilai = mantissa × 2^eksponen; menormalisasi memaksimalkan presisi; uang menggunakan titik tetap/BCD untuk menghindari pembulatan.
Contoh terpecah: biner ke desimal
- Sebuah angka memiliki mantissa
10110000dan eksponen00000011. Temukan nilai desimalnya. - Eksponen adalah $+3$. Mantisa dimulai dengan 1, sehingga nilainya negatif dan dibaca sesuai aturan dua komplemen: sebagai
1.0110000, bit tanda bernilai $-1$ dan bit pecahan menambahkan $\tfrac14 + \tfrac18 = 0.375$, sehingga mantisa bernilai $-1 + 0.375 = -0.625$. - $\text{number} = -0.625 \times 2^3 = -5.0$.
- Kesalahan yang paling umum adalah membaca mantisa negatif seolah-olah positif. Periksa bit pertama sebelum hal lainnya.
Angka titikapung memiliki mantissa 10110000 dan eksponen 00000011. Berapakah nilainya dalam desimal?
Mantissa dimulai dengan 1, jadi negatif: −1 + 1/4 + 1/8 = −0.625. Dikalikan 2^3 menghasilkan −5.0. Membacanya sebagai positif adalah kesalahan umum.
Contoh terpecahkan: desimal ke biner
- Simpan $+2.5$ dalam format mantisa 8-bit, eksponen 8-bit yang sama.
- Dalam biner, $2.5 = 10.1$. Ditulis sebagai pecangan dikali pangkat dua: $2.5 = 0.101 \times 2^2$.
- Jadi mantisanya adalah
01010000, bit tanda 0 lalu.101yang diisi dengan nol, dan eksponennya adalah00000010. - Selalu tulis dalam bentuk normalisasi terlebih dahulu; kemudian kedua bidang terbaca langsung.
Ditulis sebagai pecahan ter-normalisasi dikali pangkat dua, 2.5 = 0.101 x 2^__. Berikan eksponennya.
2.5 adalah 10.1 dalam biner; menggeser koma dua tempat ke kiri memberikan 0.101, sehingga eksponennya adalah 2 dan mantissanya adalah 01010000.
Normalisasi
- Sebuah angka dinormalisasi ketika bit signifikan pertama berada tepat setelah koma biner, sehingga tidak ada nol awal yang sia-sia. Untuk angka positif mantisa dimulai
0.1; untuk negatif,1.0. - Mengapa: ini memaksimalkan presisi, karena setiap bit mantisa membawa informasi alih-alih nol awal.
- Untuk menormalisasi, geser mantisa ke kiri dan turunkan eksponen sebanyak jumlah tempat tersebut, atau geser ke kanan dan naikkan. Nilainya tetap sama; hanya representasinya yang berubah.

Geser bit, sesuaikan eksponen, pertahankan nilai
Menawarkan bit mantisa terhadap bit eksponen
- Jumlah total bit tetap, sehingga kedua bidang bersaing.
- Lebih banyak bit mantisa berarti presisi lebih besar: setiap nilai disimpan lebih akurat, dengan kesalahan pembulatan yang lebih kecil.
- Lebih banyak bit eksponen berarti rentang lebih besar: besaran yang jauh lebih besar dan jauh lebih kecil dapat direpresentasikan, tetapi masing-masing kurang presisi.
- Pertanyaan yang meminta efek memindahkan satu bit dari satu bidang ke bidang lain menginginkan trade-off ini secara spesifik: rentang terhadap presisi.
Menormalisasi angka titikapung
Langkah-langkah normalisasi. Menggeser mantissa untuk menghilangkan nol awal yang sia-sia — dan menyesuaikan eksponen agar sesuai — mempertahankan nilai yang sama tetapi menghabiskan setiap bit untuk presisi.
Menormalisasi angka titikapung:
Normalisasi menggeser mantissa agar bit signifikan pertama mengikuti koma — setiap bit kemudian membawa informasi, dan nilainya tidak berubah.
Manakah yang benar mengenai menormalisasi angka titikapung? Pilih semua yang berlaku.
Normalisasi hanya mengubah representasi. Nilainya tidak berubah; itulah jaminan penyesuaian eksponen.
Pendekatan dan konsekuensinya
- Banyak bilangan real desimal tidak dapat disimpan secara eksak dalam biner. $0.1$ adalah pecahan berulang $0.000110011\ldots$, sehingga harus dipotong: nilai yang disimpan mendekati $0.1$ tetapi tidak pernah sama dengannya.
- Kesalahan pembulatan menumpuk melalui banyak operasi, itulah sebabnya
0.1 + 0.2tidak sama persis dengan0.3dan mengapa jam Patriot bergeser. - Jadi jangan pernah menguji dua bilangan real untuk kesamaan: tulis
ABS(x - 0.3) < 1e-9alih-alihx = 0.3. Dan waspadai pengurangan dua nilai yang hampir sama, yang membuang sebagian besar digit signifikan. - Untuk nilai yang harus eksak, terutama mata uang, gunakan titik tetap atau BCD sebagai gantinya.
Pasangkan setiap perubahan alokasi bit dengan dampaknya.
Ukuran kata tetap, sehingga presisi dan rentang saling bertentangan; overflow dan underflow adalah hasil dari bidang eksponen yang habis di setiap ujung.
Overflow dan underflow
- Overflow terjadi ketika hasil terlalu besar untuk rentang eksponen, sehingga tidak dapat direpresentasikan sama sekali.
- Underflow terjadi ketika hasil terlalu kecil, sehingga sangat dekat dengan nol sehingga eksponen tidak bisa turun cukup rendah, dan dibulatkan menjadi nol.
- Keduanya adalah sifat dari ukuran bidang eksponen, yang merupakan separuh lain dari trade-off di atas.
0.1 tidak dapat disimpan persis dalam biner (merupakan pecahan berulang), sehingga 0.1 + 0.2 tidak menghasilkan 0.3 yang tepat pada komputer.
Kesalahan pendekatan yang sangat kecil bertambah — itulah sebabnya uang ditangani dengan titik tetap atau BCD, bukan titikapung.
Untuk perhitungan uang yang pasti Anda harus menggunakan:
Kesalahan pembulatan floating-point tidak dapat diterima untuk mata uang; penyimpanan titik tetap atau BCD menyimpan nilai desimal secara eksak.
⟦⟧ Nilai yang sering terlewat
- Mantisa adalah pecahan, bukan bilangan bulat: bit pertama setelah titik adalah setengah.
- Mantisa yang dimulai dengan 1 adalah negatif dan mengikuti aturan dua komplemen. Periksa bit itu terlebih dahulu.
- Normalisasi memaksimalkan presisi; ini tidak mengubah nilai, dan tidak membuat angka menjadi lebih besar.
- Lebih banyak mantisa berarti presisi, lebih banyak eksponen berarti rentang. Overflow terlalu besar, underflow terlalu kecil.
Anda telah memahaminya
- Floating point menyimpan $\text{mantissa} \times 2^{\text{exponent}}$, keduanya dalam dua komplemen; mantisa adalah pecahan biner
- Konversi dengan membaca mantisa sebagai pecahan (dua komplemen jika dimulai dengan 1) dan mengalikannya dengan dua pangkat eksponen
- Ternormalisasi berarti bit signifikan pertama tepat setelah titik, yang memaksimalkan presisi; menggeser ke kiri menurunkan eksponen
- Lebih banyak bit mantisa memberikan presisi, lebih banyak bit eksponen memberikan rentang; biner tidak dapat menyimpan banyak bilangan real secara eksak, jadi harapkan kesalahan pembulatan, bandingkan dengan toleransi, dan gunakan titik tetap atau BCD untuk mata uang