Saturday, December 7, 2019

Thread dalam Sistem Operasi


THREAD DALAM SISTEM OPERASI
Thread merupakan unit dasar dari penggunaan CPU, yang terdiri dari Thread_ID, program counter,register set, dan stack. Sebuah thread berbagi code section, data section, dan sumber daya sistem operasi dengan Thread lain yang dimiliki oleh proses yang sama. Thread juga sering disebut lightweight process. Sebuah proses tradisional atau heavyweight process mempunyai thread tunggal yang berfungsi sebagai pengendali. Perbedaan antara proses dengan thread tunggal dengan proses dengan thread yang banyak adalah proses dengan thread yang banyak dapat mengerjakan lebih dari satu tugas pada satu satuan
waktu.
Banyak sistem operasi modern telah memiliki konsep yang dikembangkan agar memungkinkan sebuah proses untuk memiliki eksekusi multi-threads, agar dapat secara terus menerus mengetik dan menjalankan pemeriksaan ejaan didalam proses yang sama, maka sistem operasi tersebut memungkinkan proses untuk menjalankan lebih dari satu tugas pada satu waktu.

Keuntungan

Keuntungan dari program yang multithrading dapat dipisah menjadi empat kategori :
1. Responsi
Membuat aplikasi yang interaktif menjadi multithreading dapat membuat sebuah program terus berjalan meskipun sebagian dari program tersebut diblok atau melakukan operasi yang panjang, karena itu dapat meningkatkan respons kepada pengguna. Sebagai contohnya dalam web browser yang multithreading, sebuah thread dapat melayani permintaan pengguna sementara thread lain berusaha menampilkan image.

2. Berbagi sumber daya
thread berbagi memori dan sumber daya dengan thread lain yang dimiliki oleh proses yang sama. Keuntungan dari berbagi kode adalah mengijinkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama.

3. Ekonomi
dalam pembuatan sebuah proses banyak dibutuhkan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan penggunaan thread, karena thread berbagi memori dan sumber daya proses yang memilikinya maka akan lebih ekonomis untuk membuat dan context switch thread. Akan susah untuk mengukur perbedaan waktu antara proses dan thread dalam hal pembuatan dan pengaturan, tetapi secara umum pembuatan dan pengaturan proses lebih lama dibandingkan thread. Pada Solaris, pembuatan proses lebih lama 30 kali dibandingkan pembuatan thread, dan context switch proses 5 kali lebih lama dibandingkan context switch thread.

4. Utilisasi arsitektur multiprocessor
Keuntungan dari multithreading bisa sangat meningkat pada arsitektur multiprocessor, dimana setiap thread dapat berjalan secara pararel di atas processor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi pararel, tetapi pada kenyataannya hanya satu thread yang dijalankan CPU pada satu-satuan waktu(satu -satuan waktu pada CPU biasa disebut time slice atau quantum).

Kerugian

1.     Multiple thread bisa mengganggu satu sama lain saat berbagi hardware resource, misalnya chace memory.
2.     Execution time (waktu proses) dari sebuah single-thread tidak dapat diimprove (ditambah), tapi malah bisa diturunkan. Ini terjadi karena penurunan frequensi yang dibutuhkan ketika terjadi pergantian thread yang berjalan.
3.     Harus ada dukungan dari hardware ataupun software untuk melakukan multi-Threading.

Status Thread
§   Spawn :
Otomatis thread terbentuk saat proses terbentuk
Thread bisa dibentuk oleh thread lain dalam satu proses
Thread baru berada pada antrian ready
§   Block :
Thread di block bila menuggu suatu event
§   Unblock :
Bila event yang dibutuhkan sudah datang, maka thread > ready
§   Finish :
Thread telah selesai dieksekusi

 Model-Model Threading

1.     Kernel-level threading; thread ini dibuat oleh pengguna yang berkorespondensi 1-1 dengan entitas-entitas yang terjadwalkan yang berada di kernel. Ini merupakan implementasi (penerapaan) paling sederhana dari threading.

·        Thread kernel didukung langsung oleh sistem operasi.
·        Pembuatan, penjadwalan, dan manajemen thread dilakukan oleh kernel pada kernel space.
·        Pengaturan thread dilakukan oleh sistem operasi, sehingga pembuatan dan pengaturan kernel thread lebih lambat dibandingkan user thread.

Kelebihan :
1. Jika sebuah thread menjalankan blocking system call maka kernel dapat menjadualkan thread lain di aplikasi untuk melakukan eksekusi.
2. Pada lingkungan multiprocessor, kernel dapat menjadual thread-thread pada processor yang berbeda.

Kekurangan :
1. Pengaturan dan pembuatan thread lebih lambat.

2. User-level threading; sebuah pemetaan N-1, yang berarti bahwa semua level aplikasi thread dipetakan ke entitas tunggal yang ada di kernel. Dengan pendekatan ini, switching proses dapat dilakukan dengan sangat cepat.
·        Thread pengguna didukung kernel serta diimplementasikan dengan pustaka (library) thread pada tingkatan pengguna.
·        Pustaka (library) menyediakan fasilitas untuk pembuatan thread, penjadwalan thread, dan manajemen thread tanpa dukungan dari kernel.
·        Semua pembuatan dan penjadwalan thread dilakukan dalam ruang pengguna tanpa campur tangan kernel.


Model Multithreading


Multithreading adalah suatu kemampuan yang memungkinkan beberapa kumpulan instruksi atau proses dapat dijalankan secara bersamaan dalam sebuah program. Satu kumpulan instruksi yang akan dieksekusi secara independen dinamakan thread.  thread adalah alur kontrol dari suatu proses.atau sekumpulan perintah(instruksi) yang dapat dilaksanakan(dieksekusi) secara teratur dengan proses lainnya.Proses melakukan setiap langkah-langkah/intruksi yang berurutan, setiap intruksi untuk mengeksekusi baris kode/listing – listing program.Nah Karena langkah-langkah yang berurutan itu, setiap langkah membutuhkan jumlah waktu tertentu.


Model Many to One
Yaitu memetakan beberapa tingkatan thread user hanya ke satu buah kernel thread.

Kelebihan :
1. Managemen proses thread dilakukan oleh(di ruang) pengguna, sehingga menjadi lebih efisien.

Kekurangan :
1. Multithread tidak dapat berjalan atau bekerja secara paralel di dalam multiprosesor karena hanya satu thread saja yang bisa mengakses kernel dalam suatu waktu. Model ini ada pada Solaris Green dan GNU Portable.


Model One to One
Yaitu memetakan setiap user thread ke dalam 1 kernel thread.

Kelebihan :
1. Model one-to-one lebih sinkron daripada model many-to-one karena mengizinkan thread lain untuk berjalan ketika suatu thread membuat pemblokingan terhadap sistem pemanggilan, hal ini juga membuat multiple thread bisa berjalan secara parallel dalam multiprosesor.

Kekurangan :
1. Dalam pembuatan user thread diperlukan pembuatan korespondensi thread pengguna. Karena dalam proses pembuatan kernel thread dapat mempengaruhi kinerja dari aplikasi, maka kebanyakan dari implementasi model ini membatasi jumlah thread yang didukung oleh sistem. Model ini ada pada Windows NT dan OS/2.


Model Many to Many
Yaitu membolehkan setiap tingkatan user thread dipetakan ke banyak kernel thread.

Kelebihan :
1. Developer dapat membuat user thread sebanyak yang diperlukan dan kernel thread yang bersangkutan dapat berjalan secara parallel pada multiprocessor.
2. Dan ketika suatu thread menjalankan blocking system call maka kernel dapat menjadwalkan thread lain untuk melakukan eksekusi.

Kekurangan :
1. Developer dapat membuat user thread sebanyak mungkin, tetapi konkurensi tidak dapat diperoleh karena hanya satu thread yang dapat dijadwalkan oleh kernel pada suatu waktu. Model ini ada pada Solaris, IRIX, dan Digital UNIX.

Thread cancellation ialah pemberhentian thread sebelum tugasnya selesai. Umpama, jika dalam program Java hendak mematikan Java Virtual Machine (JVM). Sebelum JVM dimatikan, maka seluruh thread yang berjalan harus dihentikan terlebih dahulu. Thread yang akan diberhentikan biasa disebut target thread.Pemberhentian target thread dapat terjadi melalui dua cara yang berbeda:Asynchronous cancellation: suatu thread seketika itu juga memberhentikan target thread.
Defered cancellation: target thread secara perodik memeriksa apakah dia harus berhenti, cara ini memperbolehkan target thread untuk memberhentikan dirinya sendiri secara terurut.
Alternatifnya adalah dengan menggunakan deffered cancellation. Cara kerja dari deffered cancellation adalah dengan menggunakan satu thread yang berfungsi sebagai pengindikasi bahwa target thread hendak diberhentikan. Tetapi pemberhentian hanya akan terjadi jika target thread memeriksa apakah ia harus berhenti atau tidak. Hal ini memperbolehkan thread untuk memeriksa apakah ia harus berhenti pada waktu dimana ia dapat diberhentikan secara aman yang aman. Pthread merujuk tersebut sebagai cancellation points.
Threads Pools
Pada web server yang multithreading ada dua masalah yang timbul:Ukuran waktu yang diperlukan untuk menciptakan thread untuk melayani permintaan yang diajukan terlebih pada kenyataannya thread dibuang ketika ia seketika sesudah ia menyelesaikan tugasnya.Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan performa dari sistem.Solusinya adalah dengan penggunaan Thread Pools, cara kerjanya adalah dengan membuat beberapa thread pada proses startup dan menempatkan mereka ke pools, dimana mereka duduk diam dan menunggu untuk bekerja. Jadi ketika server menerima permintaan maka maka ia akan membangunkan thread dari pool dan jika thread tersedia maka permintaan tersebut akan dilayani.Ketika thread sudah selesai mengerjakan tugasnya maka ia kembali ke pool dan menunggu pekerjaan lainnya. Bila tidak thread yang tersedia pada saat dibutuhkan maka server menunggu sampai ada satu thread yang bebas.
Keuntungan thread pool:
Biasanya lebih cepat untuk melayani permintaan dengan thread yang ada dibanding dengan menunggu thread baru dibuat.Thread pool membatasi jumlah thread yang ada pada suatu waktu. Hal ini pentingpada sistem yang tidak dapat mendukung banyak thread yang berjalan secara concurrent.








 sumber :

Saturday, November 16, 2019

Bilangan Floating Point


Bilangan Floating Point
Floating point adalah sebuah bilangan yang digunakan untuk menggambarkan sebuah nilai yang sangat besar atau sangat kecil. Bilangan tersebut dapat diwujudkan dalam notasi ilmiah, yaitu berupa angka pecahan desimal  dikalikan dengan angka 10 pangkat bilangan tertentu. Bilangan seperti ini dapat direpresentasikan menjadi dua bagian, yaitu bagianmantisa dan bagian eksponen (E). Bagian mantisa menentukan digit dalam angka tersebut, sedangkan eksponen menentukan nilai berapa besar pangkat pada bagian mantisa tersebut (jarak dari titik posisi desimal). Contoh :
Misalkan terdapat sebuah bilangan 8934000000 maka bilangan ini dapat dituliskan dalam bentuk bilangan floating point. 8934E6 yang secara matematis artinya : 8934 x 10⁶
Bagian mantisanya adalah 8934 dan bagian eksponennya adalah E6
Cara penulisan angka seperti ini merupakan cara singkat untuk menuliskan angka yang nilainya sangat besar maupun sangat kecil atau disebut floating point number. Bilangan seperti ini banyak digunakan dalam pemrosesan grafik dan kerja ilmiah. Proses aritmatika bilangan floating point memang lebih rumit dan prosesor membutuhkan waktu yang lebih lama untuk mengerjakannya, karena mungkin akan menggunakan beberapa siklus detak (clock cycle) prosesor.
Oleh karena itu beberapa jenis komputer menggunakan prosesor sendiri untuk menangani bilangan floating point. Prosesor yang khusus menangani bilangan floating point disebutFloating Pont Unit (FPU) atau disebut juga dengan nama math co-processor.
Notasi floating-point dapat digunakan untuk merepresentasikan baik bilangan yang sangat besar (|N| » 0), bilangan yang sangat kecil atau dekat dengan nol (|N| « 1), maupun bilangan yang terdiri dari keduanya. Floating-point membuat proses operasi aritmatika menjadi relatif lebih mudah. Floating-point merepresentasi bilangan nyata dalam bentuk persamaan:
N = m × Re

Dimana m merupakan bagian bilangan pecahan yang biasa disebut significand atau mantissa e adalah bagian bilangan bulat yang biasa disebut exponent R merupakan basis dari suatu sistem bilangan
Bagian bilangan pecahan m merupakan p-digit bilangan dengan bentuk (±d.dddd … dd), dimana semua digit d adalah bilangan bulat antara 0 dan R-1. Jika digit terdepan (sebelak kiri) dari m bukan angka nol, maka bilangan ini dapat dikatakan sebagai normalized.
Sebagai contoh, bilangan desimal 0,0003754 dan 1234 dapat direpresentasi dalam notasi floating point sebagai 3,754 × 10−4 dan 1,234 × 103. Bilangan heksadesimal 257,ABF dapat direpresentasi sebagai 2,57ABF × 162. Dalam kasus bilangan biner normalized, angka terdepan (MSB) selalu ‘1’ dan dengan demikian tidak perlu disimpan secara eksplisit. Bilangan biner campuran 1100,10112 dapar direpresentasi dalam notasi floating point sebagai 0,1101011 × 23 = 0,1101011e+0011. Disini, 0,1101011 adalah mantissa dan e+0011 menunjukan bahwa eksponennya adalah +3. Contoh lainnya, 0,0001112 dapat ditulis sebagai 0,111e-0011, dengan 0,111 adalah mantissa dan e-0011 menunjukkan eksponen dari -3. Jika kita ingin merepresentasikan mantissa menggunakan delapan bit, maka angka 0,1101011 dan 0,111 dapat ditulis seperti 0,11010110 dan 0,11100000.

Rentang Angka dan Presisi

Rentang angka dapat direpresentasikan dalam mesin apapun tergantung dari jumlah bit dalam eksponen, sedangkan akurasi pecahan atau presisi pada akhirnya ditentukan oleh jumlah bit dalam mantissa. Semakin tinggi jumlah bit dalam eksponen, maka semakin besar rentang angka yang dapat direpresentasikan. Misalnya, rentang angka yang mungkin pada format bilangan biner floating-point yang menggunakan 6-bits untuk merepresentasi besarnya eksponen adalah 2-64 sampai 2+64, dimana nilai ini setara dengan rentang 10-19 sampai 10+19.

Presisi ditentukan oleh jumlah bit yang digunakan untuk merepresentasi mantissa. Hal ini biasanya direpresentasikan sebagai angka desimal presisi. Konsep presisi sebagaimana didefinisikan terhadap notasi floating-point dapat dijelaskan secara sederhana sebagai berikut. Jika mantissa disimpan dalam jumlah n bit, maka itu dapat merepresentasi sebuah bilangan desimal antara 0 dan 2n-1 seperti mantissa yang disimpan sebagai bilangan bulat tak-bertanda (unsigned). Jika M adalah bilangan terbesar seperti 10M-1 kurang dari atau sama dengan 2n-1, maka M adalah presisi yang dinyatakan sebagai angka desimal presisi. Misalnya, jika mantissa dinyatakan dalam 20 bit, maka angka desima presisi dapat ditemukan sekitar 6, seperti 220-1 sama dengan 1 048 575 dimana sedikit lebih kecil dari 106-1.

Format Bilangan Floating-Point
Format bilangan floating-point biner telah distandarkan oleh IEEE 754-2008 (atau ISO/IEC/IEEE 60559:2011), yaitu meliputi format 16-bit (half), 32-bit (single-precision), 64-bit (double-precision), 80-bit (double-extended) dan 128-bit (quad-precision). Pada artikel ini hanya akan dibahas tentang format dasar, yaitu 32-bit dan 64-bit.

Bilangan Floating Point
Floating point adalah sebuah bilangan yang digunakan untuk menggambarkan sebuah nilai yang sangat besar atau sangat kecil. Bilangan tersebut dapat diwujudkan dalam notasi ilmiah, yaitu berupa angka pecahan desimal  dikalikan dengan angka 10 pangkat bilangan tertentu. Bilangan seperti ini dapat direpresentasikan menjadi dua bagian, yaitu bagianmantisa dan bagian eksponen (E). Bagian mantisa menentukan digit dalam angka tersebut, sedangkan eksponen menentukan nilai berapa besar pangkat pada bagian mantisa tersebut (jarak dari titik posisi desimal). Contoh :
Misalkan terdapat sebuah bilangan 8934000000 maka bilangan ini dapat dituliskan dalam bentuk bilangan floating point. 8934E6 yang secara matematis artinya : 8934 x 10⁶
Bagian mantisanya adalah 8934 dan bagian eksponennya adalah E6
Cara penulisan angka seperti ini merupakan cara singkat untuk menuliskan angka yang nilainya sangat besar maupun sangat kecil atau disebut floating point number. Bilangan seperti ini banyak digunakan dalam pemrosesan grafik dan kerja ilmiah. Proses aritmatika bilangan floating point memang lebih rumit dan prosesor membutuhkan waktu yang lebih lama untuk mengerjakannya, karena mungkin akan menggunakan beberapa siklus detak (clock cycle) prosesor.
Oleh karena itu beberapa jenis komputer menggunakan prosesor sendiri untuk menangani bilangan floating point. Prosesor yang khusus menangani bilangan floating point disebutFloating Pont Unit (FPU) atau disebut juga dengan nama math co-processor.
Notasi floating-point dapat digunakan untuk merepresentasikan baik bilangan yang sangat besar (|N| » 0), bilangan yang sangat kecil atau dekat dengan nol (|N| « 1), maupun bilangan yang terdiri dari keduanya. Floating-point membuat proses operasi aritmatika menjadi relatif lebih mudah. Floating-point merepresentasi bilangan nyata dalam bentuk persamaan:
N = m × Re

Dimana m merupakan bagian bilangan pecahan yang biasa disebut significand atau mantissa e adalah bagian bilangan bulat yang biasa disebut exponent R merupakan basis dari suatu sistem bilangan
Bagian bilangan pecahan m merupakan p-digit bilangan dengan bentuk (±d.dddd … dd), dimana semua digit d adalah bilangan bulat antara 0 dan R-1. Jika digit terdepan (sebelak kiri) dari m bukan angka nol, maka bilangan ini dapat dikatakan sebagai normalized.
Sebagai contoh, bilangan desimal 0,0003754 dan 1234 dapat direpresentasi dalam notasi floating point sebagai 3,754 × 10−4 dan 1,234 × 103. Bilangan heksadesimal 257,ABF dapat direpresentasi sebagai 2,57ABF × 162. Dalam kasus bilangan biner normalized, angka terdepan (MSB) selalu ‘1’ dan dengan demikian tidak perlu disimpan secara eksplisit. Bilangan biner campuran 1100,10112 dapar direpresentasi dalam notasi floating point sebagai 0,1101011 × 23 = 0,1101011e+0011. Disini, 0,1101011 adalah mantissa dan e+0011 menunjukan bahwa eksponennya adalah +3. Contoh lainnya, 0,0001112 dapat ditulis sebagai 0,111e-0011, dengan 0,111 adalah mantissa dan e-0011 menunjukkan eksponen dari -3. Jika kita ingin merepresentasikan mantissa menggunakan delapan bit, maka angka 0,1101011 dan 0,111 dapat ditulis seperti 0,11010110 dan 0,11100000.

Rentang Angka dan Presisi

Rentang angka dapat direpresentasikan dalam mesin apapun tergantung dari jumlah bit dalam eksponen, sedangkan akurasi pecahan atau presisi pada akhirnya ditentukan oleh jumlah bit dalam mantissa. Semakin tinggi jumlah bit dalam eksponen, maka semakin besar rentang angka yang dapat direpresentasikan. Misalnya, rentang angka yang mungkin pada format bilangan biner floating-point yang menggunakan 6-bits untuk merepresentasi besarnya eksponen adalah 2-64 sampai 2+64, dimana nilai ini setara dengan rentang 10-19 sampai 10+19.

Presisi ditentukan oleh jumlah bit yang digunakan untuk merepresentasi mantissa. Hal ini biasanya direpresentasikan sebagai angka desimal presisi. Konsep presisi sebagaimana didefinisikan terhadap notasi floating-point dapat dijelaskan secara sederhana sebagai berikut. Jika mantissa disimpan dalam jumlah n bit, maka itu dapat merepresentasi sebuah bilangan desimal antara 0 dan 2n-1 seperti mantissa yang disimpan sebagai bilangan bulat tak-bertanda (unsigned). Jika M adalah bilangan terbesar seperti 10M-1 kurang dari atau sama dengan 2n-1, maka M adalah presisi yang dinyatakan sebagai angka desimal presisi. Misalnya, jika mantissa dinyatakan dalam 20 bit, maka angka desima presisi dapat ditemukan sekitar 6, seperti 220-1 sama dengan 1 048 575 dimana sedikit lebih kecil dari 106-1.

Format Bilangan Floating-Point
Format bilangan floating-point biner telah distandarkan oleh IEEE 754-2008 (atau ISO/IEC/IEEE 60559:2011), yaitu meliputi format 16-bit (half), 32-bit (single-precision), 64-bit (double-precision), 80-bit (double-extended) dan 128-bit (quad-precision). Pada artikel ini hanya akan dibahas tentang format dasar, yaitu 32-bit dan 64-bit.

1. Bilangan Floating-Point 32-bit (single-precision)

Bilangan floating-point 32-bit tersusun atas:
• 1 bit tanda (S)
• 8 bit eksponen (E)
• 23 bit mantisa (M)
Bit tanda (S) menyatakan bilangan positif jika S = 0 dan negatif jika S = 1. Field eksponen adalah basis 2. Nilai eksponen bisa negatif atau positif untuk menyatakan bilangan yang sangat kecil atau sangat besar. Format eksponen yang digunakan adalah excess-127. Nilai 127 ditambahkan dari nilai eksponen sebenarnya (Exp), yaitu Exp = E − 127. Dengan excess-127, nilai E akan selalu positif dengan jangkauan 0 sampai 255.
Nilai ekstrem adalah untuk E = 0 dan E = 255:
E = 0 menyatakan bilangan NOL (jika M = 0) dan subnormal (jika M ≠ 0)
E = 255 menyatakan bilangan TAK TERHINGGA (jika M = 0) dan NAN/not-a-number (jika M ≠ 0)
Nilai normal adalah 1 ≤ E ≤ 254 yang menunjukkan nilai eksponen sebenarnya dari -126 sampai 127. Contoh: Emin(1) = −126, E(50) = −77, dan Emax(254) = 127.

Tabel nilai eksponen di format floating-point 32-bit
Eksponen (E)
Mantissa = 0
Mantissa ≠ 0
Persamaan
0
0, -0
Subnormal
  (−1)S × 0.bit signifikan × 2−126
1-254
Nilai ternormalisasi
(−1)S × 0.bit signifikan × 2E−127
255
Bukan bilangan
(NAN=not-a-number)
Saat nilai mantissa (M) dinormalisasi, most significant bit (MSB) selalu 1. Namun, bit MSB ini tidak perlu disertakan secara eksplisit di field mantisa (Tabel diatas). Nilai mantissa yang sebenarnya adalah 1.M, sehingga nilai bilangan floating-pointnya menjadi:

Di bilangan subnormal, nilai mantissa sebenarnya adalah 0.M, sehingga bilangan floating-pointnya menjadi:

Dengan mantissa 23 bit ini ditambah 1 bit implisit, total presisi dari representasi floating-point 32-bit ini adalah 24 bit atau sekitar 7 digit desimal (yaitu 24 × log10(2) = 7,225). Dalam bahasa pemrograman, suatu bilangan single-precision ini dideklarasikan dengan tipe data float (C, C++, Java) atau single (Pascal, VB, MATLAB).

2. Bilangan Floating-Point 64-bit (double-precision)

Bilangan floating-point 64-bit tersusun atas:
• 1 bit tanda (S)
• 11 bit eksponen (E)
• 52 bit mantisa (M)
Seperti halnya dengan bilangan single-precission, bit tanda (S) menyatakan bilangan positif jika S = 0 dan negatif jika S = 1. Field eksponen adalah basis 2. Nilai eksponen bisa negatif atau positif untuk menyatakan bilangan yang sangat kecil atau sangat besar. Format eksponen yang digunakan adalah excess-1023. Nilai 1023 ditambahkan dari nilai eksponen sebenarnya (Exp), yaitu Exp = E − 1023. Dengan excess-1023, nilai E akan selalu positif dengan jangkauan 0 sampai 2047.
Nilai ekstrem adalah untuk E = 0 dan E = 2047:
E = 0 menyatakan bilangan NOL (jika M = 0) dan subnormal (jika M ≠ 0)
E = 255 menyatakan bilangan TAK TERHINGGA (jika M = 0) dan NAN/not-a-number (jika M ≠ 0)
Nilai normal adalah 1 ≤ E ≤ 2047 yang menunjukkan nilai eksponen sebenarnya dari -1022 sampai 1023. Contoh: Emin(1) = −1022, E(100) = −923, dan Emax(254) = 1023.
Tabel nilai eksponen di format floating-point 64-bit
Eksponen (E)
Mantissa = 0
Mantissa ≠ 0
Persamaan
0
0, -0
Subnormal
  (−1)S × 0.bit signifikan × 2−1022
1-2046
Nilai ternormalisasi
(−1)S × 0.bit signifikan × 2E−1023
2047
Bukan bilangan
(NAN=not-a-number)
Nilai mantisa (M) dinormalisasi, yang berarti most significant bit (MSB) selalu 1. Bit MSB ini tidak perlu disertakan secara eksplisit di field mantisa. Nilai mantisa sebenarnya adalah 1.M, sehingga nilai bilangan floating-pointnya menjadi:

Dengan mantissa 52 bit ini ditambah 1 bit implisit, total presisi dari representasi floating-point 32-bit ini adalah 53 bit atau sekitar 16 digit desimal (yaitu 53 × log10(2) = 15.955). Dalam pemrograman, suatu bilangan double-precision ini dideklarasikan dengan tipe data double (C, C++, Java).










sumber: