JavaRush /Java Blog /Random-ID /Bilangan real dalam memori komputer. Penjelasan.
Marianna
Level 9
Москва

Bilangan real dalam memori komputer. Penjelasan.

Dipublikasikan di grup Random-ID
Selamat siang Saat mempelajari kuliah “Nuansa Bekerja dengan Bilangan Real” pada pencarian pertama (bagian 2. Struktur bilangan floating point) dan kuliah tambahan tentang topik tersebut, pasti banyak yang menemui banyak pertanyaan tentang topik ini. Awalnya, saya mencoba memberikan diri saya jawaban yang diperlukan, dan sekarang saya menawarkannya kepada Anda untuk membantu Anda memahami sepenuhnya dalam urutan logis yang konsisten. 1. Sistem bilangan desimal dan biner. 1.1 Sistem bilangan desimal adalah salah satu sistem yang paling umum; ini adalah sistem yang kita gunakan untuk perhitungan matematis non-komputer di sekolah, di universitas, atau dalam kehidupan. Menggunakan angka 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (Arab) - total 10 digit. Ada juga notasi Romawi untuk angka, namun sekarang praktis tidak digunakan. Dalam sistem desimal, penghitungan dilakukan dalam satuan, puluhan, ratusan, ribuan, puluhan ribu, ratusan ribu, jutaan, dan seterusnya. - dengan kata lain, ini semua adalah digit dari nomor tersebut. Digit suatu bilangan adalah kedudukan (tempat) digit tersebut dalam catatan bilangan. Digit terendah dari bilangan asli (dan paling signifikan ) adalah digit satuan (paling kanan). Kenapa dia yang paling tidak penting? Karena dengan menghilangkan satuan angka suatu bilangan, maka bilangan itu sendiri akan mengalami perubahan minimal (misalnya angka 345 dan 340). Selanjutnya angka kedua adalah angka puluhan, dst. Apa maksudnya semua ini? Mari kita ambil bilangan bulat apa pun dalam sistem desimal dan menguraikannya menjadi digit . 3297 = 3*1000 + 2*100 + 9*10 + 7 Jadi, kita menemukan bahwa bilangan 3297 berisi 3 satuan angka keempat (yaitu 3 ribu), 2 satuan angka ketiga (2 ratusan), 9 satuan angka kedua (9 puluhan) dan 7 satuan angka pertama . Dengan kata lain, angka ini adalah tiga ribu dua ratus sembilan puluh tujuh dan karenanya bersifat posisional . Bagaimana dengan angka-angka bilangan pecahan (nyata) ? Angka-angka bilangan pecahan (bagian pecahannya) disebut: persepuluhan, perseratus, seperseribu, sepersepuluh ribu, dst. Semakin jauh suatu angka dari koma desimal (dari seluruh bagian bilangan tersebut), semakin kecil signifikansinya (jika dibuang, nilai bilangan tersebut akan sedikit berubah). Sebagai contoh, mari kita ambil bilangan pecahan apa pun yang dinyatakan sebagai desimal: 25,076 = 2*10 + 5 +0*0,1 + 7*0,01 +6*0,001 Jadi, kita menemukan bahwa bilangan pecahan 25,076 berisi 2 puluhan, 5 satuan, 0 persepuluh , 7 perseratus dan 6 perseribu. Sistem desimal menggunakan 10 digit dan kelipatan 10 tempat - oleh karena itu dinamakan "desimal". 1.2 Sistem bilangan biner adalah sistem bilangan yang digunakan di hampir semua komputer modern dan perangkat elektronik komputasi lainnya. Untuk mencatat angka, hanya menggunakan dua digit - 0 dan 1. Agar tidak bingung di sistem bilangan mana angka tersebut ditulis, dilengkapi dengan indikator di kanan bawah (itu adalah basis dari sistem bilangan ), untuk Contoh: 1000₁₀ 1000₂ Di sini bilangan pertama adalah ribuan yang lazim dalam sistem desimal, dan bilangan terbawah adalah bilangan dalam representasi sistem biner dan sama dengan dalam sistem desimal... 8 ! Seperti sistem desimal, sistem biner juga memecah angka menjadi digit . Setiap digit dalam bilangan biner disebut bit (atau digit ). (Jika ada yang tertarik, empat bit adalah nibble (atau tetrad), 8 bit adalah satu byte , 16 bit adalah satu kata , 32 bit adalah kata ganda ). Bit (digit) juga diberi nomor dari kanan ke kiri, dimulai dari nol (berbeda dengan sistem desimal). Bit paling tidak signifikan, paling tidak signifikan, dan kanan memiliki nomor urut 0 . Berikutnya adalah bit pertama , kedua , dst., semakin tua bitnya, semakin signifikan (dengan analogi dengan sistem desimal, kami memahami - jika Anda menghapus yang dari angka 1455, Anda akan mendapatkan angka 1450 - hampir sama dengan awal, namun jika di hilangkan angka ratusan maka akan tersisa angka 1050 yang sudah jauh dari nilai awal, karena tempat ratusan jauh lebih penting (orde tinggi) dibandingkan tempat satuan ). Contoh. JANGAN BACA BELUM :))) Bilangan real di memori komputer.  DALAM PENGEMBANGAN!!!  - 2 Di bagian bawah, bit bilangan biner pecahan ini diberi nomor merah - total kita memiliki 18 bit (digit) dari bilangan ini. Ke depan, saya ingin mencatat bahwa bilangan pecahan disimpan dalam memori komputer dengan cara yang sangat berbeda - ini akan dibahas nanti. Sementara itu, mari pelajari cara mengonversi bilangan dari satu sistem bilangan ke sistem bilangan lainnya. 2. Mengubah bilangan bulat dan pecahan dari sistem desimal ke sistem biner dan sebaliknya. 2.1 Konversi dari desimal ke biner. 2.1.1 Bilangan bulat. Untuk mengubah bilangan desimal bilangan bulat ke sistem bilangan biner, Anda perlu membagi bilangan ini dengan 2, tuliskan sisa pembagiannya (selalu sama dengan 0 atau 1, tergantung apakah bilangan tersebut genap atau ganjil) , lalu bagi lagi hasil pembagiannya dengan 2, tulis lagi sisa pembagiannya (0 atau 1), lalu bagi lagi hasil pembagian kedua dengan 2. Lanjutkan seperti ini hingga hasil pembagiannya sama dengan satu. Selanjutnya, kita tuliskan semua angka nol dan satu yang dihasilkan dalam urutan terbalik , dimulai dari hasil pembagian terbaru yang selalu sama dengan 1. Catatan penting. Hasil akhir pembagian BULAT APA PUN secara berurutan dengan 2 akan selalu menjadi satu (1)! Jika hasilnya lebih besar dari 1, kita terus membagi hasil ini dengan 2 hingga diperoleh satu. Dan hasil pembagian dengan 2 bisa menjadi nol (0) hanya dalam satu kasus - ini adalah pembagian nol itu sendiri dengan 2. Contoh. Mari kita ubah bilangan 145 dari sistem desimal ke biner. 145/2 = 72 (sisa 1 ) 72/2 = 36 (sisa 0 ) 36/2 = 18 (sisa 0 ) 18/2 = 9 (sisa 0 ) 9/2 = 4 (sisa 1 ) 4/2 = 2 (sisa 0 ) 2/2 = 1 (sisa 0 ) Sekarang kita “mengumpulkan” bilangan biner kita dalam urutan terbalik. Kami mendapatkan nomor 10010001. Selesai! Nuansa menarik 1. Mari kita ubah bilangan 1 dari sistem desimal ke biner. Dalam sistem biner, bilangan ini juga akan ditulis 1. Toh, hasil akhir pembagian dengan 2 yang seharusnya sama dengan 1, sudah sama dengan bilangan 1 itu sendiri.1₁₀ = 1₂ Nuansa menarik 2. Mari kita konversi angka 0 dari sistem desimal ke biner. Dalam sistem biner, bilangan ini juga akan ditulis sebagai 0. 0₁₀ = 0₂ 2.1.2 Bilangan pecahan. Bagaimana cara mengubah bilangan pecahan ke biner? Untuk mengubah pecahan desimal ke sistem bilangan biner, Anda harus: a) mengubah seluruh bagian pecahan menjadi sistem biner sesuai dengan algoritma yang dipelajari pada paragraf 2.1.1 b) mengalikan bagian pecahan dengan 2 , tulis digit yang dihasilkan dari hasil SEBELUM titik desimal (selalu sama dengan 0 atau 1, yang logis), lalu HANYA kalikan lagi bagian pecahan dari hasil yang diperoleh dengan 2, tuliskan lagi angka hasil SEBELUM koma (0 atau 1) dan seterusnya hingga pecahan sebagian hasil perkaliannya menjadi sama dengan 0 atau sampai jumlah desimal yang diperlukan (diperlukan presisi ) (sama dengan banyaknya perkalian dengan 2). Kemudian Anda perlu menuliskan hasil barisan angka nol dan satu yang ditulis SECARA BERURU setelah titik yang memisahkan bagian bilangan bulat dan pecahan dari bilangan real (pecahan). Contoh 1. Mari kita ubah bilangan 2,25 (2 koma 25 perseratus) dari sistem desimal ke sistem biner. Dalam sistem biner pecahannya akan sama dengan 10,01 . Bagaimana kita mendapatkan ini? Bilangan tersebut terdiri dari bagian bilangan bulat (sampai titik tertentu) - ini adalah 2 dan bagian pecahan - ini adalah 0,25. 1) Terjemahan seluruh bagian: 2/2 = 1 (sisa 0 ) Seluruh bagian menjadi 10 . 2) Terjemahan bagian pecahan. 0,25 * 2 = 0 ,5 (0) 0,5 * 2 = 1 ,0 (1) Bagian pecahan menjadi sama dengan 0 akibat perkalian berturut-turut dengan 2. Kita berhenti mengalikan. Sekarang kita "mengumpulkan" bagian pecahan SECARA BERURU - kita mendapatkan 0,01 dalam sistem biner. 3) Tambahkan bagian bilangan bulat dan pecahan - kita mendapatkan bahwa pecahan desimal 2,25 akan sama dengan pecahan biner 10,01 . Contoh 2. Mari kita ubah bilangan 0,116 dari sistem desimal ke sistem biner. 0,116 * 2 = 0,232 (0) 0,232 * 2 = 0,464 (0) 0,464 * 2 = 0,928 (0) 0,928 * 2 = 1,856 (1) //buang bagian bilangan bulat dari hasil ini 0,856 * 2 = 1 , 712 (1 ) //buang seluruh bagian dari hasil ini 0,712 * 2 = 1 , 424 (1) //buang seluruh bagian dari hasil ini 0,424 * 2 = 0 , 848 (0) Seperti yang bisa kita lihat, perkaliannya terus menerus , bagian pecahan hasilnya tidak menjadi sama dengan 0. Kemudian kita putuskan bahwa kita akan mengubah pecahan desimal kita menjadi biner dengan akurasi 7 tempat desimal (bit) setelah titik (di bagian pecahan). Mari kita ingat apa yang telah kita pelajari tentang bit-bit yang tidak penting - semakin jauh bit (bit) tersebut dari keseluruhan bagian, semakin mudah kita mengabaikannya (penjelasan di bagian 1 kuliah, siapa yang lupa). Kami mendapatkan pecahan biner 0,0001110 dengan akurasi 7 bit setelah titik. 2.2 Konversi dari biner ke desimal. 2.2.1 Bilangan bulat. Untuk menerjemahkan keseluruhanbilangan dari sistem bilangan biner ke desimal, bilangan ini perlu dibagi menjadi digit (bit) dan mengalikan setiap digit (bit) dengan angka 2 hingga derajat positif tertentu (derajat ini mulai dihitung dari kanan ke kiri dari yang paling tidak signifikan (bit kanan) dan mulai dari 0 ) . Dengan kata lain, pangkat dua sama dengan jumlah bit tertentu (tetapi aturan tidak tertulis ini hanya dapat digunakan dalam kasus konversi bilangan bulat , karena untuk bilangan pecahan penomoran bit dimulai dari bagian pecahan, yang diterjemahkan ke dalam sistem desimal secara berbeda ). Selanjutnya Anda perlu menjumlahkan produk yang dihasilkan. Contoh. Mari kita ubah bilangan biner 110011 ke sistem bilangan desimal. 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ Hasilnya, kita mendapatkan angka 51 di sistem biner . Sebagai informasi, di bawah ini adalah tabel pangkat pertama bilangan 2 . JANGAN BACA BELUM :))) Bilangan real di memori komputer.  DALAM PENGEMBANGAN!!!  - 5 ! Perlu diketahui bahwa pangkat nol suatu bilangan selalu 1. 2.2.2 Bilangan pecahan. Untuk mengubah bilangan pecahan biner (nyata) menjadi desimal , Anda harus: a) mengubah bagian bilangan bulatnya menjadi desimal sesuai dengan algoritma dari paragraf 2.2.1 ; b) terjemahkan bagian pecahannya sebagai berikut. Bagian pecahan harus direpresentasikan sebagai jumlah hasil kali angka-angka dengan dua , dipangkatkan negatif tertentu (pangkat digit pertama setelah titik (setelah seluruh bagian pecahan) akan sama dengan -1, untuk digit kedua setelah titik akan sama dengan -2, dst.) Hasil jumlah ini akan menjadi bagian pecahan dari bilangan dalam sistem desimal. Contoh. Mari kita ubah bilangan 10111.01 ke sistem biner. 10111,01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) . (0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) . (0 + 0,25) = 23,25₁₀ Hasilnya, kita mendapatkan angka 23,25 dalam sistem bilangan desimal. Tabel pangkat negatif pertama dari 2 diberikan di bawah ini. JANGAN BACA BELUM :))) Bilangan real di memori komputer.  DALAM PENGEMBANGAN!!!  - 7 2.2.3 Rumus umum untuk mengubah bilangan biner ke desimal. Mari kita berikan rumus umum untuk mengubah bilangan dari biner ke desimal (baik bilangan bulat maupun pecahan). JANGAN BACA BELUM :))) Bilangan real di memori komputer.  DALAM PENGEMBANGAN!!!  - 4 dimana A adalah bilangan dalam sistem bilangan biner; Basis sistem bilangan adalah 2 (artinya setiap bit dikalikan 2 pangkat); N— jumlah digit bilangan bulat (bit) ; m adalah jumlah digit pecahan (bit) dari bilangan tersebut . Bit pertama dari bagian bilangan bulat dari titik pemisah disorot dengan warna merah . Itu selalu dikalikan 2 pangkat nol. Bit berikutnya sebelumnya (di sebelah kiri) dikalikan 2 pangkat pertama, dan seterusnya. Bit pertama bagian pecahan dari titik pemisah disorot dengan warna hijau . Itu selalu dikalikan 2 pangkat minus satu. Bit berikutnya di sebelah kanan dikalikan 2 pangkat minus dua, dan seterusnya. 3. Notasi ilmiah: notasi yang dinormalisasi pada kedua sistem. Mantissa, eksponen, derajat eksponen. 3.1 Bentuk penulisan suatu bilangan secara eksponensial. Sebelumnya, kita mempelajari skema rinci untuk mencatat nomor posisi demi digit. Mari kita ambil nomornya 0.0000000000000000000016 . Ini memiliki entri yang sangat panjang dalam bentuk standar . Dan dalam bentuk eksponensial akan terlihat seperti ini: 1.6 * 10ˉ²¹ Jadi apa yang dimaksud dengan bentuk eksponensial suatu bilangan dan bagaimana cara merepresentasikan suatu bilangan dalam bentuk tersebut? Notasi ilmiah suatu bilangan merupakan representasi bilangan real dalam bentuk mantissa dan eksponen . Nyaman untuk merepresentasikan angka yang sangat besar dan sangat kecil, serta untuk menyatukan tulisannya. N = M * pⁿ dimana N adalah bilangan yang akan ditulis, M adalah mantissa dari bilangan tersebut, p adalah basis (sama dengan basis sistem bilangan dari bilangan yang diberikan), n (bilangan bulat) adalah ordo (derajat , bisa positif dan negatif), p pangkat n adalah bilangan karakteristik (eksponen, yaitu basis yang dipangkatkan (urutan)). Nuansa penting. Jika bagian bilangan bulat suatu bilangan desimal berbeda dengan 0 , maka orde (derajat) eksponennya adalah positif , jika bagian bilangan bulatnya sama dengan 0 , maka derajat eksponennya adalah negatif . 3.2 Bentuk penulisan bilangan yang normal dan ternormalisasi. Bentuk normal suatu bilangan adalah bentuk yang mantissanya (tanpa memperhitungkan tanda) terletak pada setengah selang [0,1], yaitu 0 <= M < 1. Bentuk penulisan ini mempunyai bentuk kekurangannya: beberapa angka ditulis secara ambigu (misalnya, 0,0001 dapat ditulis sebagai 0,000001*10², 0,00001⋅10¹, 0,0001⋅10º, 0,001⋅10ˉ¹ dan seterusnya). Oleh karena itu, bentuk pencatatan lain tersebar luas (terutama dalam ilmu komputer) - yang dinormalisasi, di mana mantissa suatu bilangan desimal mengambil nilai dari 1 (inklusif) hingga 10 (eksklusif), yaitu, 1 <= M < 10 (demikian pula, mantissa dari bilangan biner mengambil nilai dari 1 hingga 2 ). Dengan kata lain, mantissa dalam sistem desimal harus berupa bilangan pecahan dari 1,0 (inklusif) hingga 10 (eksklusif) , mis. bagian bilangan bulat mantissa harus berisi satu digit, dan bagian pecahan tidak dibatasi secara matematis. Keuntungan dari bentuk yang dinormalisasi adalah, bilangan apa pun (kecuali 0) ditulis dengan cara yang unik. Kekurangannya adalah tidak mungkin untuk merepresentasikan angka 0 dalam bentuk ini, sehingga representasi bilangan dalam ilmu komputer memberikan tanda khusus (bit) untuk bilangan 0. 3.3 Contoh penulisan bilangan desimal dalam bentuk normalisasi eksponensial. Mari kita lihat contohnya. Contoh 1. Mari kita tuliskan bilangan desimal 1015000 (satu juta lima belas ribu) dalam bentuk normalisasi eksponensial. Sistem bilangan untuk bilangan ini adalah desimal, jadi basisnya adalah 10 . Mari pilih mantissa . Untuk melakukan ini, bayangkan suatu bilangan sebagai pecahan, yang bagian pecahannya akan sama dengan nol (karena bilangan tersebut adalah bilangan bulat): 1000000.0. Jika bagian bilangan bulat dari bilangan tersebut lebih besar dari 0 , maka pindahkan titik tersebut ke kiri posisi awalnya (di dalam bagian bilangan bulat) hingga hanya tersisa satu digit pada bagian bilangan bulat tersebut . Setelah itu kami memberi titik. Kami membuang angka nol yang tidak signifikan (di akhir angka). Kita mendapatkan mantissa dari bilangan yang sama dengan 1,015 . Mari kita tentukan derajat (urutan) basis bilangan tersebut. Berapa banyak posisi ke kiri titik kita yang memisahkan bagian bilangan bulat dan pecahan telah dipindahkan? Untuk enam posisi. Artinya pesanannya akan menjadi 6 . Dalam hal ini, urutannya positif (kami memindahkan titik di bagian bilangan bulat dari bilangan tersebut tidak sama dengan 0). Entri terakhir dalam bentuk yang dinormalisasi: 1.015 * 10⁶ . Kita dapat menulis bilangan ini dalam bentuk ini: 1,015E6 (di mana E6 adalah eksponen suatu bilangan desimal, yaitu 10 pangkat 6). Mari kita uji diri kita sendiri. Notasi eksponensial suatu bilangan tidak lebih dari hasil kali suatu bilangan (mantissa) dan bilangan lainnya (eksponen). Apa yang terjadi jika 1,015 dikalikan 10⁶? 1,015*10⁶ = 1,015*1000000 = 1015000 . Itu benar. Pendekatan ini (dinormalisasi) membantu membuat catatan yang tidak ambiguangka dalam bentuk eksponensial, seperti yang ditunjukkan di atas. Contoh 2. Mari kita tulis bilangan real desimal 0,0098 dalam bentuk ternormalisasi. Mari kita soroti basis bilangannya - sama dengan 10 (sistem bilangan desimal). Mari kita pilih mantissa dari bilangan tersebut - sama dengan 9,8 (bagian bilangan bulat dari bilangan tersebut sama dengan nol, yang berarti kita memindahkan titik ke kanan ke digit penting pertama (berada dalam kisaran dari 1 hingga 9 inklusif) Kita tentukan urutan bilangannya - kita pindahkan titiknya sebanyak tiga posisi, artinya urutannya adalah 3. Positif apakah negatif atau negatif? Karena kita memindahkan titik ke kanan (pada bagian pecahan dari bilangan tersebut), maka order (pangkat) akan menjadi negatif . Catatan akhir dari angka dalam bentuk normal adalah 9.8 * 10ˉ³ atau 9.8E-3 . Mari kita periksa lagi. Kalikan 9.8 dengan 10ˉ³. 9.8 * 10ˉ³ = 9.8 * 0.001 = 0.0098 . Itu benar. Contoh 3. Mari kita tulis bilangan real desimal 3,56 dalam bentuk ternormalisasi. Pilih basis bilangan tersebut - sama dengan 10 (sistem bilangan desimal). Pilih mantissa dari bilangan tersebut - sama dengan... 3.56 (bilangan bulat bagian dari bilangan tersebut adalah satu angka tunggal, tidak sama dengan 0. Artinya titik tersebut tidak perlu digeser kemanapun, bilangan itu sendiri akan menjadi mantissa.) Mari kita soroti urutan alasnya: Pada bilangan berapa mantissa harus , sama dengan bilangan itu sendiri, dikalikan agar tidak berubah? Per unit. Artinya ordernya akan menjadi nol. Catatan akhir bilangan dalam bentuk normalisasinya adalah 3,56*10º atau 3,56E0. 4. Menyimpan bilangan real dalam memori komputer: float dan double. 4.1 Jenis mengapung dan ganda. Mari beralih ke bagian penting dari kuliah kita. Seperti yang sudah kita ketahui, ada dua jenis bilangan real di Java: float dan double . Tipe float menempati 32 bit dalam memori komputer dan dapat mengambil nilai dalam kisaran [3.4E-38; 3.4E+38) (dengan kata lain, dalam rentang dari 3.4*10ˉ³⁸ (inklusif) hingga 3.4 * 10³⁸ (tidak termasuk)). Nuansa penting 1. Angka float bisa positif atau negatif. Rentang di atas disajikan untuk menunjukkan modul angka yang termasuk dalam rentang float. Nuansa penting 2. 10³⁸ kira-kira sama dengan 2¹²⁷ , masing-masing, 10 ˉ³⁸ kira-kira sama dengan 2ˉ¹²⁷ . Dengan demikian, interval nilai absolut bilangan float dapat ditulis sebagai [3.4*2ˉ¹²⁷; 3,4*2¹²⁷). Tipe ganda memakan memori komputer dua kali lebih banyak -64 bit dan dapat menerima nilai desimal dalam rentang [-1.7E+308; 1,7E+308) masing-masing. 4.2 Bentuk bilangan biner yang dinormalisasi secara eksponensial. Kita tahu bahwa angka-angka disimpan dalam bentuk biner di memori komputer. Jadi, mari kita ambil angka 1560.256 (tipe float) dan mengubahnya menjadi sistem biner dalam bentuk posisi: 11000011000.01000001100 . Anda mungkin mengira begitulah cara menyimpannya di memori komputer. Tapi itu tidak benar! Dalam memori komputer, tipe float dan double ( tipe floating-point nyata ) disimpan dalam bentuk normalisasi eksponensial , tetapi basis pangkatnya adalah 2 , bukan 10. Hal ini disebabkan oleh fakta bahwa, seperti disebutkan di atas, semua data dalam komputer direpresentasikan dalam bentuk biner (bit). Sejumlah memori komputer dialokasikan untuk suatu nomor. Mari kita nyatakan bilangan positif 15.2 dalam bentuk eksponensial yang dinormalisasi: 1.52*10¹ . Selanjutnya, mari kita nyatakan "kembaran" binernya 1111.00110011001 juga dalam notasi normalisasi eksponensial, menggunakan algoritma yang sama: 1) Basisnya akan sama dengan 2 2) Mantissa akan sama dengan 1.11100110011001 3) Derajatnya akan positif dan sama dengan 3 (titiknya digeser 3 bit ke kiri) dalam sistem desimal. Mari kita ubah ke sistem biner: 11 . Jadi dalam bentuk normalisasi eksponensial biner akan menjadi 1,11100110011001 * 2¹¹. 4.3 Menyimpan bentuk biner ternormalisasi eksponensial dari bilangan float dalam memori komputer. Jadi, kami mengetahui bahwa bilangan real akan disimpan dalam memori komputer dalam bentuk biner ternormalisasi eksponensial . Bagaimana tampilannya di memori? Mari kita ambil tipe float . Komputer mengalokasikan 32 bit untuk setiap nomor float . Mereka didistribusikan sebagai berikut . Gambar ini secara skematis menunjukkan memori yang dialokasikan untuk nomor float 32-bit di komputer. JANGAN BACA BELUM :))) Bilangan real di memori komputer.  DALAM PENGEMBANGAN!!!  - 5 Penomoran bit ditunjukkan dengan warna merah . Hijau menunjukkan bagian memori yang dialokasikan (1 bit) untuk menyimpan tanda nomor. Warna kuning menunjukkan bagian memori yang dialokasikan untuk menyimpan daya yang digeser (urutan) bentuk bilangan eksponensial (8 bit). Birumenunjukkan bagian memori yang dialokasikan untuk menyimpan mantissa nomor yang dinormalisasi tanpa unit implisit (23 bit). Mari kita lihat lebih dekat. 1) Tanda tangan sedikit. Bit paling signifikan (pertama dari kiri) selalu dialokasikan untuk menyimpan tanda bilangan (1 jika bilangan negatif, dan 0 jika bilangan positif). Pengecualian mungkin berupa angka nol - dalam pemrograman, nol bisa negatif dan positif . 2) Berikutnya adalah bit derajat (urutan) eksponen dengan basis 2 . Untuk ini, 8 bit dialokasikan. Derajat eksponen bilangan float , seperti yang kita ketahui, dapat berupa negatif (untuk bilangan yang bagian bilangan bulatnya adalah 0, lihat paragraf 3.3) dan positif (untuk bilangan yang bagian bilangan bulatnya bukan nol) dan berkisar dari 2ˉ¹²⁷ hingga 2¹²⁷ . Secara teori, kita harus mengalokasikan satu bit untuk menentukan tanda eksponen, seperti halnya bit tanda. Tapi itu tidak benar. Agar tidak membuang waktu sedikit pun dalam menentukan tanda eksponen, bilangan float menambahkan offset ke eksponen setengah byte +127 (0111 1111). Jadi, alih-alih rentang pangkat dari 2ˉ¹²⁷ hingga 2¹²⁷, komputer menyimpan rentang pangkat dari 0 hingga +254 - semua nilai pangkat adalah positif , tidak perlu membuang byte ekstra pada tanda. Ternyata nilai eksponennya digeser setengahnya dibandingkan nilai yang mungkin. Artinya untuk mendapatkan nilai eksponen sebenarnya, Anda harus mengurangi offset ini dari nilai yang tersimpan di memori. Jika nilai eksponen yang tersimpan di memori lebih kecil dari offset (+127), maka eksponennya negatif: ini logis. Contoh. Mari kita lakukan pergeseran derajat negatif -18 . Kita tambahkan offset +127 ke dalamnya, kita mendapatkan nilai derajat +108 (jangan lupa derajat 0 dalam perhitungan). Mari kita ubah derajatnya menjadi bentuk biner: 1101100 Tetapi 8 bit memori dialokasikan untuk derajat tersebut, dan di sini kita mendapatkan angka 7-bit. Sebagai ganti digit (bit) tinggi yang kosong dan kosong, komputer menambahkan 0. Hasilnya adalah derajat ini akan disimpan dalam memori komputer sebagai 01101100 . Coba kita lihat: +108 < +127, artinya derajatnya sebenarnya negatif. Perhatikan tabel menarik berikut ini: Tabel ini menunjukkan semua kemungkinan nilai pangkat dari bentuk bilangan float yang dinormalisasi dalam sistem biner dan desimal. Seperti yang bisa kita lihat, dalam sistem biner +127 sama dengan setengah dari keseluruhan byte (8 bit). 3) Sisanya 23 bit dicadangkan untuk mantissa JANGAN BACA BELUM :))) Bilangan real di memori komputer.  DALAM PENGEMBANGAN!!!  - sebelas. Namun untuk mantissa biner yang dinormalisasi, bit paling signifikan (alias bagian bilangan bulat dari mantissa yang dinormalisasi) selalu sama dengan 1 (disebut implisit satu ), karena jumlah mantissa terletak pada kisaran 1<=M<2 (dan juga ingat paragraf 2.1.1 kuliah). Satu-satunya pengecualian adalah angka 0. Tidak ada gunanya menulis satuan ke dalam 23 bit yang diberikan dan membuang-buang memori, sehingga sisa mantissa (bagian pecahannya) ditulis ke dalam 23 bit yang diberikan. Ternyata pada dasarnya bagian penting dari bilangan float memiliki panjang 24, yang mana bitnya lebih sedikit yang disimpan. Nuansa penting. Ingatlah bahwa ketika mengubah bilangan pecahan desimal menjadi bilangan biner, bagian pecahan dalam sistem biner sering kali menjadi sangat besar. Dan kami hanya memiliki 32 bit untuk menyimpan nomor float. Dalam hal ini, digit terkecil, terkecil dari pecahan biner (ingat paragraf 2.1.2 kuliah ini) tidak akan dimasukkan dalam memori yang dialokasikan dan komputer akan mengabaikannya . Keakuratan angkanya akan hilang , tapi, Anda tahu, jumlahnya minimal. Dengan kata lain, presisi pelampung pecahan adalah 6-7 tempat desimal. 4.4 Menyimpan bentuk biner ternormalisasi eksponensial dari bilangan ganda dalam memori komputer. Bilangan real bertipe ganda disimpan dalam memori komputer dengan cara yang sama seperti bilangan float, dengan pengecualian beberapa karakteristik. Nomor ganda memiliki 64 bit dalam memori komputer. Mereka didistribusikan sebagai berikut (juga berurutan dari kiri ke kanan): 1) Bit tanda (lihat paragraf 4.3). Kami memahami bahwa jumlah bit ini adalah 63 . 2) Gelar (urutan). Nomor ganda dialokasikan 11 bit untuk menyimpannya . Pergeseran derajat juga dilakukan , tetapi untuk bilangan ganda akan sama dengan +1023. 3) Mantissa (bagian penting). Nomor ganda dialokasikan 52 bit (digit) untuk menyimpannya. Selain itu, bagian bilangan bulat persis dari mantissa ( unit implisit ) tidak disimpan dalam memori . Perlu juga dicatat bahwa presisi penggandaan pecahan adalah sekitar 16 tempat desimal . 4.5 Contoh representasi bilangan real dari sistem desimal dalam memori komputer. Dan poin terakhir dari kuliah kita adalah contoh pengubahan bilangan pecahan dari sistem bilangan desimal ke dalam bentuk penyimpanannya di memori komputer untuk memantapkan pemahaman topik. Contoh 1. Ambil sebuah nomor-4,25 tipe pelampung. Mari kita sajikan dalam bentuk normalisasi eksponensial dalam sistem bilangan biner, mengingat semua yang telah kita bahas dalam kuliah ini. 1) Ubah bagian bilangan bulat suatu bilangan menjadi bentuk biner: 4/2 = 2 (sisa pembagian 0 ) 2/2 = 1 (sisa pembagian 0 ) Bagian bilangan bulat akan sama dengan 100 dalam sistem biner. 2) Ubah bagian pecahan suatu bilangan menjadi bentuk biner. 0,25*2 = 0,5 ( 0 ) 0,5*2 = 1,0 ( 1 ) Bagian pecahan akan sama dengan 0,01 dalam sistem biner. 3) Jadi, -4,25₁₀ = -100,01₂ . 4) Mari kita ubah bilangan -100.01₂ menjadi bentuk normalisasi eksponensial dalam sistem bilangan biner (artinya basis pangkatnya adalah 2). -100.01₂ = -1.0001 *2² Mari kita ubah nilai derajat dari format desimal ke biner . 2/2= 1 (sisa 0 ) Derajatnya 10₂. Kita mendapatkan bahwa bilangan -4,25₁₀ dalam bentuk normalisasi eksponensial binernya akan sama dengan -1,0001 * 2¹º Mari kita tuliskan tampilannya di memori komputer. Bit tandanya adalah 1 (angka negatif). Offset eksponen sama dengan 2+127 = 129₁₀ = 10000001₂ Kami menghapus yang implisit dari mantissa , kami mendapatkan 00010000000000000000000 ( kami mengisi bit orde rendah yang kosong dengan nol ). Intinya. 1 10000001 000100000000000000000000 - ini adalah bagaimana angka -4,25 disimpan dalam memori komputer. Contoh 2. Ubah bilangan float 0,75₁₀ menjadi format penyimpanan biner di memori komputer. Hasilnya seharusnya 0 01111110 100000000000000000000000 . Terima kasih atas perhatian Anda.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION