3 / 20 · Konsep
Kebijakan keluaran titik tetap
Pisahkan skala masukan, pembulatan negatif, saturasi, dan perilaku berputar.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Bit menyimpan bilangan bulat; skala memberi makna
Representasikan x sebagai bilangan bulat X dan F bit pecahan, sehingga x=X/2^F. Kita menggunakan F yang sama untuk A dan B. Hasil perkalian dan akumulatornya memiliki 2F bit pecahan. Mengonversi jumlah mentah akhir S kembali ke skala masukan memerlukan pembagian dengan 2^F. Konversikan sekali setelah reduksi lengkap; membulatkan setiap suku terlebih dahulu dapat membuang kontribusi yang berarti jika digabungkan.
Untuk F=4, [1.5,−0.5] disimpan sebagai [24,−8] dan [0.25,2.0] sebagai [4,32]. Hasil kali titik mentahnya adalah 24×4−8×32=−160. Nilai riilnya −160/256=−0.625, dan bilangan bulat keluarannya pada F=4 adalah −10.
Uji pembulatan negatif secara eksplisit
Untuk S=−17 dan F=4, bilangan bulat keluaran tepatnya adalah −1.0625. Pergeseran kanan aritmetika menghasilkan −2; pemotongan menuju nol menghasilkan −1. Pembulatan ke terdekat dengan nilai seri ke genap juga menghasilkan −1. Jadi pergeseran aritmetika tidak dapat dipertukarkan dengan semua penafsiran “buang pecahannya”. Pada nilai tengah −24/16=−1.5 dan −40/16=−2.5, aturan seri ke genap memilih −2 pada kedua kasus.
Konversi bawaan kita membulatkan jumlah lengkap ke nilai terdekat, dengan nilai seri ke genap, lalu melakukan saturasi sesuai lebar keluaran. Pada magnitudo absolut, hitung hasil bagi q dan sisa r. Naikkan q jika r melebihi setengah pembagi, atau jika sama dengan setengah dan q ganjil. Pulihkan tanda aslinya sesudahnya. Dalam RTL, mengambil nilai absolut bilangan paling negatif membutuhkan nilai sementara lebih lebar; acuan Node menggunakan BigInt.
Definisikan overflow pada keluaran
Keluaran delapan bit bertanda mencakup −128..127. Nilai pembulatan 130 tersaturasi ke 127 atau berputar ke −126. Nilai −130 tersaturasi ke −128 atau berputar ke 126. Kedua kebijakan dapat disengaja, tetapi harus disebutkan dan diuji.
Bandingkan akumulator mentah dan keluaran terkonversi secara terpisah. Jumlah mentah yang salah mengarah ke aritmetika atau penjadwalan; jumlah benar dengan keluaran salah mengarah ke skala, pembulatan, atau saturasi. Pertahankan kasus batas yang dihitung manual agar acuan dan RTL tidak sama-sama menyembunyikan kesalahan konversi yang sama.
Coba sendiri
Cari hasil pembulatan seri ke genap untuk F=4, S=−56, dan keluaran delapan bit tersaturasi untuk F=4, S=−2080.
Baca penjelasan
−56/16=−3.5 dibulatkan ke bilangan bulat genap −4. −2080/16=−130, yang tersaturasi ke −128 setelah pembulatan.