|
Contact Me
credits
|
Floating Point Arithmetic
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 bilagnan
tertentu. Bilangan seperti ini dapat direpresentasikan menjadi dua bagian,
yaitu bagian mantisa 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⁶
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
disebut Floating 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 (sebelaH 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.
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.
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). |
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) |
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) |
0 Komentar:
Posting Komentar