Monday 28 August 2017

Floating Point Number Into Binary Options


Desimal Konversi Terapung-Titik Prosedur Konversi Aturan untuk mengubah bilangan desimal menjadi floating point adalah sebagai berikut: Mengkonversi nilai absolut bilangan menjadi biner, mungkin dengan bagian pecahan setelah titik biner. Hal ini dapat dilakukan dengan mengubah bagian integral dan pecahan secara terpisah. Bagian integral diubah dengan teknik yang telah diperiksa sebelumnya. Bagian fraksional dapat dikonversi dengan perkalian. Ini pada dasarnya adalah kebalikan dari metode pembagian: kita berulang kali berkembang biak dengan 2, dan memanen masing-masing bit seperti yang terlihat tersisa dari desimal. Tambahkan kali 2 0 ke akhir nomor biner (yang tidak mengubah nilainya). Normalkan nomornya. Pindahkan titik biner sehingga satu bit dari kiri. Sesuaikan eksponen dua sehingga nilainya tidak berubah. Tempatkan mantissa ke bidang mantissa nomor. Lepaskan yang terdepan, dan isi dengan angka nol di sebelah kanan. Tambahkan bias ke eksponen dua, dan letakkan di bidang eksponen. Biasnya adalah 2 k minus 1 minus 1, dimana k adalah jumlah bit pada bidang eksponen. Untuk format delapan bit, k 3, jadi biasnya adalah 2 3minus1 minus 1 3. Untuk IEEE 32-bit, k 8, jadi biasnya adalah 2 8minus1 minus 1 127. Atur bit tanda, 1 untuk negatif, 0 untuk Positif, sesuai dengan tanda nomor aslinya. Menggunakan Prosedur Konversi Mengkonversi 2.625 ke format floating point 8-bit kami. Bagian integral mudah, 2 10 10 2. Untuk bagian pecahan: Menghasilkan 1 dan tidak ada yang tersisa. Jadi 0,40625 10 0,01101 2. Normalisasi: 0,01101 2 1,101 2 kali 2 -2. Mantissa adalah 1010, eksponennya adalah -2 3 1 001 2. Tanda bit adalah 0. Jadi 0.40625 adalah 0 001 1010 1a 16 Convert -12.0 ke format floating point 8-bit kami. 12 10 1100 2. Normalisasi: 1100.0 2 1.1 2 kali 2 3. Mantissa adalah 1000, eksponennya adalah 3 3 6 110 2. Tanda bit adalah 1. Jadi -12.0 adalah 1 110 1000 e8 16 Mengkonversi desimal 1,7 ke format floating point 8-bit kami. Bagian integral mudah, 1 10 1 2. Untuk bagian pecahan: Hasilkan 1 dan lanjutkan dengan sisanya. Alasan mengapa prosesnya nampaknya terus berlanjut tanpa henti adalah begitu. Angka 710, yang membuat pecahan desimal yang sangat masuk akal, adalah pecahan berulang dalam biner, sama seperti fraksi 13 adalah fraksi berulang dalam desimal. (Ini berulang juga dalam biner.) Kita tidak dapat mewakili ini persis seperti bilangan floating point. Yang terdekat kita bisa datang dalam empat bit yaitu, 1011. Karena kita sudah memiliki 1, angka delapan bit terbaik yang bisa kita buat adalah 1.1011. Sudah dinormalisasi: 1.1011 2 1.1011 2 kali 2 0. Mantissa adalah 1011, eksponennya adalah 0 3 3 011 2. Tanda bit adalah 0. Hasilnya adalah 0 011 1011 3b 16. Tentu ini tidak tepat. Jika Anda mengubahnya kembali menjadi desimal, Anda mendapatkan 1,6875. Convert -1313.3125 ke format floating point IEEE 32-bit. Bagian yang tidak terpisahkan adalah 1313 10 10100100001 2. Fraksional: Menghasilkan 0 dan melanjutkan. Floating Point Thomas Finley, April 2000 Isi dan Pendahuluan Dokumen ini menjelaskan standar floating-point IEEE 754. Ini menjelaskan representasi biner dari angka-angka ini, bagaimana mengkonversi ke desimal dari floating point, bagaimana mengkonversi dari floating point ke desimal, membahas kasus-kasus khusus dalam floating point, dan akhirnya berakhir dengan beberapa kode C untuk pemahaman floating point lebih lanjut. Dokumen ini tidak mencakup operasi dengan nomor floating point. Saya menulis dokumen ini sehingga jika Anda tahu bagaimana cara mewakili, Anda dapat melewati bagian representasi, dan jika Anda tahu bagaimana mengkonversi ke desimal dari satu presisi, Anda dapat melewati bagian itu, dan jika Anda tahu bagaimana mengubahnya menjadi presisi tunggal dari Desimal, Anda bisa melewati bagian itu. Representasi Pertama, ketahuilah bahwa bilangan biner bisa ada, jika Anda mau memaafkan ucapan saya, sebuah titik desimal. Ia bekerja lebih atau kurang dengan cara yang sama dengan titik desimal dengan angka desimal. Sebagai contoh, desimal 22.589 hanya 22 dan 510 -1 810 -2 910 -3. Demikian pula, bilangan biner 101.001 hanya 12 2 02 1 12 0 02 -1 02 -2 12 -3. Atau lebih tepatnya 2 2 2 0 2 -3 (nomor khusus ini berhasil menjadi 9.125, jika itu membantu pemikiran Anda). Kedua, ketahuilah bahwa bilangan biner, seperti bilangan desimal, dapat ditunjukkan dalam notasi ilmiah. Misalnya. Angka desimal 923.52 dapat direpresentasikan sebagai 9.2352 10 2. Demikian pula, bilangan biner dapat dinyatakan dengan cara itu juga. Katakanlah kita memiliki bilangan biner 101011.101 (yaitu 43.625). Ini akan diwakili dengan menggunakan notasi ilmiah sebagai 1.01011101 2 5. Sekarang saya yakin pemahamannya sempurna, akhirnya saya dapat masuk ke dalam representasi. Unit floating point presisi tunggal adalah paket 32 ​​bit, dibagi menjadi tiga bagian satu bit, delapan bit, dan dua puluh tiga bit, dalam urutan itu. Saya akan menggunakan bilangan biner 1.01011101 2 5 yang disebutkan sebelumnya untuk menggambarkan bagaimana seseorang mengambil nomor biner dalam notasi ilmiah dan melambangkannya dalam notasi floating point. Jika kita mengkonversi hanya dari hex ke biner, 0x64 adalah 0110 0100, yang merupakan hasil yang sama dengan 011001 yang dihasilkan di atas. Cara ini jauh lebih cepat. Pokoknya kita ambil angka-angka yang kita dapatkan, dan wakili mereka sebagai 0,011001, menempatkannya sesuai urutan yang kita dapatkan. Berurut urutan dengan representasi biner kami dari 329, kami mendapatkan 101001001.011001. Dalam notasi ilmiah biner kami, ini adalah 1.01001001011001 2 8. Kami kemudian menggunakan apa yang kita ketahui tentang bagaimana bilangan presisi tunggal terwakili untuk menyelesaikan proses ini. Tanda itu positif, jadi bidang isiannya adalah 0. Eksponennya adalah 8. 8 127 135, jadi bidang eksponennya adalah 10000111. Mantissa hanya 01001001011001 (ingat mantra 1 dari mantissa berarti kita tidak termasuk yang terdepan 1) plus Namun banyak 0s kita harus menambahkan ke sisi kanan untuk membuat bilangan biner 23 bit panjang. Karena salah satu masalah pekerjaan rumah melibatkan mewakili ini sebagai hex, saya akan menyelesaikan dengan nomor hex. Kemudian kita memecahnya menjadi potongan empat bit (karena masing-masing digit heksadesimal setara dengan 4 bit) dan kemudian mengonversi masing-masing jumlah empat bit menjadi digit heksadesimal yang sesuai. Jadi, dalam heksadesimal, nomor ini adalah 0x43A4B200. Bilangan Khusus Terkadang komputer merasa perlu mengeluarkan hasil penghitungan yang mencerminkan bahwa beberapa kesalahan telah dilakukan. Mungkin besarnya hasil perhitungannya lebih besar atau lebih kecil dari format ini nampaknya bisa support. Mungkin Anda mencoba untuk membagi dengan nol. Mungkin Anda mencoba untuk mewakili nol Bagaimana seseorang menangani masalah ini Jawabannya adalah bahwa ada kasus khusus bilangan floating point, khususnya bila bidang eksponen adalah semua 1 bit (255) atau semua 0 bit (0). Angka yang Dinormalkan Jika Anda memiliki bidang eksponen, semua nol, inilah yang disebut bilangan denormalized. Dengan bidang eksponen sama dengan nol, Anda akan berpikir bahwa eksponen sebenarnya adalah -127, jadi nomor ini akan berbentuk 1.MANTISSA 2 -127 seperti yang dijelaskan di atas, tapi ternyata tidak. Sebagai gantinya, itu adalah 0.MANTISSA 2 -126. Perhatikan bahwa eksponen tidak lagi menjadi nilai dari bidang eksponen minus 127. Ini hanya -126. Perhatikan juga bahwa kita tidak lagi menyertakan satu bit tersirat untuk mantissa. Sebagai contoh, ambil bilangan floating point yang diwakili sebagai 0x80280000. Pertama, ubah ini menjadi biner. Tanda kita adalah 1, jadi angka ini negatif. Eksponen kami adalah 0, jadi kami tahu ini adalah nomor denormalized. Mantissa kami adalah 0101, yang mencerminkan mantissa nyata dari 0,0101 ingat bahwa kita tidak memasukkan apa yang sebelumnya merupakan bit tersirat untuk eksponen nol. Jadi, ini berarti kita memiliki nomor -0.0101 2 2 -126 -0.3125 10 2 -126 -1,25 10 2 -128. Anda bisa menganggap nol sebagai sekadar bilangan denormalized lainnya. Nol diwakili oleh eksponen nol dan mantissa nol. Dari pemahaman kita tentang bilangan denormalized, ini diterjemahkan menjadi 02 -126 0. Bit tanda ini bisa positif (0) atau negatif (1), mengarah ke nol positif atau negatif. Ini tidak masuk akal secara matematis, tapi diperbolehkan. Sama seperti kasus semua bit nol di bidang eksponen adalah kasus khusus, begitu juga kasus semua bit. Jika bidang eksponen adalah semua, dan mantissa adalah nol, maka jumlah ini tidak terbatas. Bisa ada infinitas positif atau negatif tergantung pada tanda sedikit. Sebagai contoh, 0x7F800000 adalah tak berhingga positif, dan 0xFF800000 adalah tak terhingga negatif. NaN (Bukan Nomor) Jumlah khusus ini memiliki bidang eksponen 255 (semua satu bit) seperti tak terhingga, namun berbeda dari representasi tak terhingga dimana mantissa mengandung beberapa bit. Tidak masalah di mana mereka atau berapa banyak dari mereka ada, asalkan ada beberapa. Tanda sedikit tampaknya tidak ada kaitannya dengan hal ini. Contoh dari jumlah khusus ini meliputi 0x7FFFFFFF, 0xFF81ABD0, 0x7FAA12F9, dan seterusnya. Ringkasan Kasus Khusus Ringkasan kasus khusus ditunjukkan pada tabel di bawah ini. Ada lebih sedikit salinan tabel yang ditemukan di halaman 301 dari edisi kedua Organisasi dan Desain Komputer, Perangkat Keras Perangkat Lunak Antarmuka oleh Patterson dan Hennessy, buku teks untuk Ilmu Komputer 104 pada semester Spring 2000. Meski hanya satu presisi yang tercakup dalam teks di atas, saya menyertakan presisi ganda demi kelengkapan. Kapan, Dimana, dan Dimana Tidak Bila Anda memiliki operasi seperti 00 atau mengurangi tak terhingga dari tak terhingga (atau beberapa perhitungan ambigu lainnya), Anda akan mendapatkan NaN. Bila Anda membagi angka dengan nol, Anda akan mendapatkan tak terhingga. Namun, akuntansi untuk operasi khusus ini memerlukan usaha ekstra dari pihak perancang, dan dapat menyebabkan operasi lebih lambat karena lebih banyak transistor digunakan dalam desain chip. Untuk alasan ini terkadang CPU tidak memperhitungkan operasi ini, dan malah menghasilkan pengecualian. Misalnya, ketika saya mencoba membagi dengan nol atau melakukan operasi tanpa batas, komputer saya menghasilkan pengecualian dan menolak menyelesaikan operasi (komputer saya memiliki prosesor G3, atau MPC750). Perangkat Lunak Pembantu Jika Anda tertarik untuk menyelidiki lebih lanjut, saya menyertakan dua program yang saya berikan kode C yang dapat Anda jalankan untuk mendapatkan pemahaman yang lebih baik tentang bagaimana kerja floating point, dan juga untuk memeriksa pekerjaan Anda pada berbagai tugas. Hex 2 Float Program ini menerima masukan jumlah heksadesimal dan membacanya sebagai data mentah ke dalam variabel theFloat. Program ini kemudian menampilkan representasi heksadesimal data di theFloat (mengulangi masukan), dan mencetak bersamaan dengan kuantitas floating point yang diwakilinya. Saya menunjukkan di sini contoh menjalankan program. Perhatikan jumlah floating point case khusus (0, tak terhingga, dan bukan angka). Untuk bilangan denormalized but unzero, program ini akan menampilkan angka nol meski jumlahnya tidak benar-benar nol. Jika Anda ingin mengatasi masalah ini, ganti f dalam string pemformatan fungsi cetak dengan e, yang akan mencabut nomor tersebut dengan presisi tinggi dengan notasi ilmiah. Saya tidak memilikinya karena saya menemukan notasi ilmiah yang sangat menyebalkan. Float 2 Hex Ini adalah sedikit modifikasi dari program Hex 2 Float. Pengecualiannya terbaca dalam bilangan floating point. Sama seperti dan mengeluarkan bentuk heksadesimal ditambah angka floating point. Sekali lagi saya menyertakan contoh lari dari program ini, membenarkan hasil contoh masalah yang saya bahas di awal teks ini, bersama dengan beberapa kasus sederhana lainnya. Perhatikan representasi heksadesimal dari 0,2. Dan itulah akhir dari bab itu. Thomas Finley 2000Decimal Konverter Floating-Point Tentang Desimal ke Floating-Point Converter Ini adalah bilangan desimal ke biner floating-point converter. Ini akan mengubah angka desimal ke bilangan presisi terurut tunggal dan presisi ganda IEEE 754 bilangan biner floating-point, menggunakan round-half-to-even rounding (mode pembulatan IEEE default). Hal ini diimplementasikan dengan aritmatika presisi sewenang-wenang, jadi konversinya dibulatkan dengan benar. Ini akan mengubah angka normal dan subnormal, dan akan mengubah angka yang melimpah (tak terhingga) atau underflow (menjadi nol). Angka floating-point yang dihasilkan dapat ditampilkan dalam sepuluh bentuk: dalam desimal, dalam biner, dalam notasi ilmiah desimal yang dinormalisasi, dalam notasi ilmiah biner yang dinormalisasi, sebagai desimal yang dinormalisasi dengan kekuatan dua, sebagai bilangan bulat desimal yang menghasilkan dua , Sebagai bilangan bulat desimal kali kekuatan sepuluh, sebagai heksadesimal floating-point konstan, dalam biner mentah, dan dalam heksadesimal mentah. Setiap bentuk mewakili nilai pasti dari bilangan floating-point. Mengapa Menggunakan Konverter Ini Konverter ini akan menunjukkan mengapa angka dalam program komputer Anda, seperti 0,1, tidak berperilaku seperti yang Anda harapkan. Di dalam komputer, sebagian besar angka dengan titik desimal hanya bisa didekati dengan nomor lain, hanya sedikit dari yang Anda inginkan, harus berdiri untuk itu. Sebagai contoh, dalam presisi tunggal floating-point, 0,1 menjadi 0.100000001490116119384765625. Jika program Anda mencetak 0,1, itu berbohong kepada Anda jika mencetak 0.100000001, it8217 masih berbohong, tapi setidaknya itu berarti Anda benar-benar tidak memiliki 0,1. Cara Menggunakan Konverter Ini Masukkan angka positif atau negatif, baik dalam bentuk standar (misalnya 134.45) atau eksponen (misalnya 1.3445e2). Tunjukkan nilai fraksional dengan titik desimal (lsquo. rsquo), dan jangan gunakan koma. Intinya, Anda bisa memasukkan apa yang diterima program komputer sebagai floating-point literal, kecuali tanpa akhiran (seperti lsquofrsquo). Centang kotak untuk presisi IEEE yang Anda inginkan pilih Double. Satu. atau keduanya. (Double adalah defaultnya.) Double berarti sebuah integer 53 bit (kurang jika subnormal) dengan eksponen 11-bit Tunggal berarti signifikansi 24 bit (kurang jika subnormal) dengan eksponen 8-bit. Centang kotak untuk format output yang Anda inginkan pilih satu atau semua sepuluh. (Desimal adalah defaultnya.) Klik lsquoConvertrsquo untuk berkonversi. Klik lsquoClearrsquo untuk mereset formulir dan mulai dari awal. Jika Anda ingin mengonversi nomor lain, cukup ketik di atas nomor asli dan klik lsquoConvertrsquo 8212 tidak perlu mengklik lsquoClearrsquo terlebih dahulu. Ada sepuluh bentuk output yang bisa dipilih: Desimal. Tampilkan bilangan floating-point dalam desimal. (Perluas kotak output, jika perlu, untuk melihat semua digit.) Biner. Tampilkan bilangan floating-point dalam biner. (Perluas kotak output, jika perlu, untuk melihat semua digit.) Normalized notasi ilmiah desimal. Menampilkan bilangan floating-point dalam desimal, tapi kompak, menggunakan notasi ilmiah yang dinormalisasi. (Perbanyak kotak output, jika perlu, untuk melihat semua digit.) Notasi ilmiah biner yang dinormalisasi. Menampilkan bilangan floating-point dalam biner, tapi kompak, menggunakan notasi ilmiah biner yang dinormalisasi. Catatan . Angka subnormal ditampilkan normal, dengan eksponen aktualnya. Dinormalisasi desimal kali kekuatan dua. Tampilkan bilangan floating-point dalam notasi ilmiah hibrida yang dinormalisasi, karena angka desimal dinormalisasi menghasilkan dua kekuatan. Desimal bilangan bulat kali memiliki kekuatan dua. Menampilkan bilangan floating-point sebagai bilangan bulat desimal kali dengan kekuatan dua. (Representasi biner dari bilangan bulat desimal adalah pola bit dari representasi floating-point, kurang sedikit trailing nol). Bentuk ini paling menarik untuk eksponen negatif, karena mewakili bilangan floating-point sebagai fraksi diad. Desimal bilangan bulat kali kekuatan sepuluh. Menampilkan bilangan floating-point sebagai bilangan bulat desimal kali dengan kekuatan sepuluh. Bentuk ini paling menarik bagi eksponen negatif, karena ini mewakili bilangan floating-point sebagai pecahan. (Perluas kotak output, jika perlu, untuk melihat semua digit.) Konstanta floating-point heksadesimal. Tampilkan bilangan floating-point sebagai heksadesimal floating-point constant. Catatan . Ada banyak cara untuk memformat konstanta floating-point heksadesimal, seperti yang akan Anda lihat jika, misalnya, Anda membandingkan keluaran program Java, Visual C, gcc C, dan Python. Perbedaan di berbagai bahasa bersifat dangkal meskipun 8212 angka nol yang tertinggal mungkin atau mungkin tidak diperlihatkan, eksponen positif mungkin atau mungkin tidak memiliki tanda tambah, dan lain-lain. Konverter ini memformat konstanta tanpa tertinggal nol dan tanpa tanda tambah. Catatan . Seperti banyak bahasa pemrograman, konverter ini menunjukkan angka subnormal yang tidak disadari, dengan eksponennya disetel ke eksponen normal minimum. Catatan . Angka heksadesimal terakhir dalam konstanta floating-point heksadesimal mungkin memiliki trailing biner 0s dalam hal ini tidak berarti menyiratkan bahwa bit tersebut ada dalam format IEEE yang dipilih. Biner mentah Menampilkan bilangan floating-point dalam format IEEE mentah (tanda sedikit diikuti oleh bidang eksponen diikuti oleh bidang significand). Baku heksadesimal. Menampilkan bilangan floating-point dalam format IEEE mentah, setara dengan format biner mentah namun dinyatakan kompak dalam heksadesimal. (Lihat di sini untuk rincian lebih lanjut tentang bentuk keluaran ini.) Ada dua bendera keluaran: Tidak tepat. Jika dicentang, ini menunjukkan bahwa konversi itu tidak tepat, maka harus dibulatkan ke perkiraan jumlah masukan. (Konversi tidak tepat saat output desimal tidak sesuai dengan input desimal, tapi ini adalah cara yang lebih cepat untuk diceritakan.) Catatan. Bendera konverter ini meluap hingga tak terhingga dan terbelakang ke nol sebagai tidak tepat. Subnormal Jika dicentang, ini menunjukkan bahwa jumlahnya terlalu kecil, dan dikonversi dengan presisi kurang (presisi sebenarnya ditunjukkan dalam tanda kurung). Implementasi Saya menulis konverter ini dari awal 8212, hal itu tidak bergantung pada fungsi konversi asli seperti strtod () atau strtof () atau printf (). Hal ini didasarkan pada algoritma berbasis integer besar yang saya gambarkan dalam artikel saya ldquoCorrect Desimal To Floating-Point Menggunakan Big Integer rdquo. Saya menerapkannya dengan BCMath. Untuk alasan praktis, saya menetapkan batas sewenang-wenang (agak) pada panjang input desimal yang akan Anda dapatkan pesan kesalahan jika Anda menekannya. Ini akan menyaring masukan yang jika tidak akan meluap ke tak terhingga atau turun ke nol, namun juga akan mencegah Anda memasuki beberapa kasus pembulatan ldquohardrdquo. (Untuk catatan sekalipun, konverter ini menerima semua contoh keras yang telah saya bahas di situs saya.) Untuk semua masukan yang diterima, hasilnya benar (walaupun ada bug yang lolos dari pengujian ekstensif saya). Mengkonfigurasi IEEE 754 Floating Point menjadi Binary Ini Posting menjelaskan bagaimana mengkonversi bilangan floating point ke bilangan biner dalam format IEEE 754. Tautan yang bagus tentang subjek konversi IEEE 754 ada di situs Thomas Finleys. Untuk posting ini saya akan tetap menggunakan format biner floating-point presisi IEEE 754: binary32. Lihat posting lain untuk implementasi C, Java dan Python untuk mengkonversi antara format biner dan desimal. Mengekspresikan angka dalam notasi ilmiah Anda mungkin sadar bahwa bilangan biner, seperti angka desimal, dapat memiliki angka desimal. Dan bilangan biner itu, seperti angka desimal, dapat dinyatakan dengan menggunakan notasi ilmiah: desimal: 923.52 9.2352 x 10 2 biner: 101011.101 1.01011101 x 2 5 Angka yang dinaikkan 10 atau 2 dinaikkan, ldquoexponentrdquo, mewakili jumlah tempat yang bergeser Ke kiri atau kanan titik desimal yang sesuai. Dalam representasi floating-point IEEE 754, bilangan biner dibagi menjadi tiga bagian: bit tanda, eksponen dan mantissa (bagian fraksional). Ini hanya menempati satu bit dan mewakili tanda: 0 untuk positif dan 1 untuk negatif. Bagian eksponen untuk floating point 16-bit (setengah presisi) menempati 5 bit dan menyimpan nilai eksponen yang dijelaskan di atas. Untuk 32-bit (single-precision) seperti pada contoh binary32 di atas, bagian ini menempati 8 bit untuk format 64-bit (presisi ganda) bagian ini akan menempati 11 bit. Berurusan dengan eksponen positif dan negatif Elemen pengkodean 8 bit dapat mewakili bilangan bulat dari 0 (00000000) sampai 255 (11111111). Tapi bagaimana dengan eksponen negatif Kita harus bisa memasukkannya juga. Untuk menutupi ini, kami memastikan bahwa eksponen bernilai lebih besar. Jika eksponen kita (katakanlah) 3 maka tambahkan 127 untuk memberi 3 127 130 (desimal) 10000010 (biner). Bias ini hanya 2 n ndash 1 dimana n adalah jumlah bit eksponen, jadi pengkodean eksponen 8 bit akan memiliki bias 2 8 ndash 1 128 ndash 1 127. Jika eksponen kita minus 3, maka hasilnya adalah -3 127 124 (desimal) 1111100 (biner). Dengan kata lain, (00000000) sampai (01111111) mewakili eksponen dari -127 sampai nol, dan (10000000) menjadi (11111111) akan mewakili eksponen dari 1 sampai 128. Bagian ketiga dari representasi 32-bit adalah 23 bit . Mantissa, yang kadang-kadang disebut significand, mewakili bagian pecahan dari bilangan tersebut dalam notasi ilmiah biner yaitu bilangan biner di sebelah kanan titik desimal. Contoh: 12.375 ke dalam format biner IEEE 754 Contoh untuk mengkonversi dari representasi desimal menjadi format binary32 diambil dari halaman Wikipedia. Perhatikan nomor 12.375. Ambil bagian non-fraksional dari 12.375 dan ubah menjadi biner dengan cara biasa: 12 (desimal) adalah 1100 (biner) Sejak 12 (8 1) (4 1) (2 0) (2 0) Mengkonversi bagian pecahan ( 0,375) ke dalam biner dilakukan dengan menggunakan prosedur berikut: 1. kalikan fraksi dengan 2 2. simpan bagian integer dari perkalian sebagai hasil biner 3. Ulangi fraksi baru dengan 2 4. ulangi 1 ndash 3 sampai sebagian kecil dari nol Ditemukan atau sampai batas presisi tercapai yaitu 23 digit pecahan untuk format biner32 IEEE 754 yaitu: 0,375 x 2 0,750 0 0,750 gt 0 0,750 x 2 1,500 1 0,500 gt 1 0,500 x 2 1.000 1 0.000 gt 1 Bagian fraksi akhirnya datang Sampai 0.000, jadi kita berhenti. Hasil biner adalah 011, oleh karena itu 0,375 (desimal) adalah 0,011 (biner) 12,375 (desimal) sekarang 1100.011 (biner). Mengkonversi hasil ke format biner format biner yang diperlukan IEEE 754 mengharuskan Anda mewakili nilai dalam format ilmiah yang dijelaskan sebelumnya, sehingga Dari notasi ilmiah ini, kita dapat menyimpulkan: Sign 0 (bilangan positif) bias 2 8 -1 127 (8- Bit eksponen encoding untuk binary32) menambahkan ini ke eksponen memberi: 3 127 130 (desimal) 10000010 (biner) Mantissa 100011 (bagian pecahan di sebelah kanan titik desimal) Dari sini kita membentuk representasi format biner32 32 bit IEEE 754 yang dihasilkan dari 12.375 sebagai:

No comments:

Post a Comment