Bilangan Floating Point 32bit dan 64 bit
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 x R^e
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
Contoh:
976.000.000.000 = 9,76 x 10^ 11
0,000000000976 = 9,76 x 10^-11
Bilangan
Floating-Point 32-bit (single-precision)
·
1 bit tanda (S),
·
8 bit eksponen (E),
dan
·
23 bit untuk mantisa
(M)
Figure 0.1 Format
bilangan floating-point 32-bit
Bit tanda (S) menyatakan bilangan positif jika S=0 dan negatif jika S=1.
Field
eksponen adalah radix 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;
Eksponen (E)
|
Mantissa=0
|
Mantissa ≠ 0
|
Persamaan
|
0
|
0, -0
|
subnormal
|
( − 1)S × 0.bit signifikan × 2 − 126
|
1-254
|
Nilai ternormalisasi
|
( − 1)S × 1.bit signifikan × 2E − 127
|
|
255
|
∞
|
bukan bilangan (NAN=not-a-number)
|
Table 0.1 Nilai
eksponen di format floating-point 32-bit
Saat nilai mantisa (M)
dinormalisasi, most significant bit (MSB)
selalu 1. Namun, bit MSB ini tidak perlu disertakan secara eksplisit di field
mantisa (Tabel 0.1↑). Nilai mantisa yang sebenarnya adalah 1.M, sehingga nilai bilangan floating-pointnya menjadi:
Di bilangan subnormal,
nilai mantisa 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 pemrograman,
suatu bilangan single-precision ini dideklarasikan dengan tipe data float (bahasa C, C++, Java) dan single (Pascal, VB, MATLAB).
float anumber; // 32-bit single
precision number
int main(){
anumber = -1.1245;
...
return 0;
}
Contoh 1
Bilangan
floating-point dinyatakan dengan B = 0x3E600000 . Nyatakan B sebagai
bilangan pecahan desimal.
Jadi, B = 0x3E6300000 menyatakan
bilangan floating-point 0.21875
Figure 0.2 Contoh
bilangan floating-point 32-bit B = 0x3E60000
Contoh 2
Bilangan B
mempunyai E = 0 dan M ≠ 0, sehingga merupakan bilangan
subnormal dan berlaku persamaan bilangan subnormal. Nilai pecahan desimal dari bilangan
subnormal B adalah:
Figure 0.3 Contoh
bilangan floating-point 32-bit B = 0x0060000
Contoh 3
Nyatakan bilangan
pecahan desimal B=35.625 dalam format floating-point 32-bit
Bilangan B dipecah menjadi bilangan utuh dan
bilangan pecahan. Bilangan utuh dan bilangan pecahan dikonversikan ke biner
(nyatakan bilangan seperti di fixed-point). Kedua bilangan tersebut disatukan
dan dinormalkan (geser) untuk mendapatkan nilai mantissa dan eksponen akhir.
B
|
=
|
(35.625)10
|
=
|
(35)10 + (0.625)10
|
|
=
|
(100011)2 + (0.1001)2
|
|
=
|
(100011.1001)2
|
|
=
|
(1.000111001)2 × 25
|
Dari perhitungan di
atas, nilai eksponen E = 5 + 127 = 132 = 10000100 dan mantissa M = 000111001, sehingga
diperoleh B = 0x420E4000 (Gambar 0.4↓).
Figure 0.4 Contoh
bilangan floating-point 32-bit B = 35.625
Bilangan
floating-point negatif mempunyai bentuk sign-magnitude,
yaitu nilai S menunjukkan tanda sedangkan besar nilai ditunjukkan oleh mantissa
dan eksponennya.
Contoh 4
Nyatakan format
floating-point 32-bit dari bilangan A = − 0.21875
Dari Contoh ↑, nilai bilangan − A = + 0.21875 adalah 0x3E600000. Dengan mengubah field S=1, maka
bilangan A dinyatakan dengan 0xBE600000 (Gambar 0.5↓)
Figure 0.5 Bilangan
negatif A = − 0.21875 dinyatakan
dengan 0xBE600000
·
1 bit tanda (S),
·
11 bit eksponen (E),
dan
·
52 bit untuk mantisa
(M)
Figure 0.6 Format
bilangan floating-point 64-bit
Seperti
halnya dengan bilangan single-precission, bit tanda (S) menyatakan bilangan
positif jika S=0 dan negatif jika S=1. Field eksponen adalah radix 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=2047 menyatakan
bilangan TAK TERHINGGA (jika M = 0) dan NAN/not-a-number (jika M ≠ 0) (Tabel 0.2↓);
·
Nilai normal
adalah 1 ≤ E ≤ 2046 yang menunjukkan nilai
eksponen sebenarnya dari -1022 sampai 1023
·
Contoh: Emin(1) = − 1022, E(100) = − 923 dan Emax(2046) = 1023;
Mantissa=0
|
Mantissa ≠ 0
|
Persamaan
|
|
0
|
0, -0
|
subnormal
|
( − 1)S × 0.bit signifikan × 2 − 1022
|
1-2046
|
Nilai ternormalisasi
|
( − 1)S × 1.bit signifikan × 2E − 1023
|
|
2047
|
∞
|
bukan bilangan (NAN=not-a-number)
|
Table 0.2 Nilai
eksponen di format floating-point 64-bit
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.995).
Dalam pemrograman,
suatu bilangan single-precision ini dideklarasikan dengan tipe data double (bahasa C, C++, Java).
double anumber; // 64-bit
double precision number
int main(){
anumber = -1.1245;
...
return 0;
}
Contoh 5
Bilangan
floating-point dinyatakan dengan B = 0x3FD5000000000000 . Nyatakan B
sebagai bilangan pecahan desimal.
Jadi, B = 0x3FD5000000000000 menyatakan
bilangan floating-point 0.328125
Figure 0.7 Contoh
bilangan floating-point 64-bit B = 0x3FD5000000000000 = 0.328125
Contoh 6
Nyatakan bilangan
pecahan desimal B=35.625 dalam format floating-point 64-bit
Bilangan B dipecah menjadi bilangan utuh dan
bilangan pecahan. Bilangan utuh dan bilangan pecahan dikonversikan ke biner
(nyatakan bilangan seperti di fixed-point). Kedua bilangan tersebut disatukan
dan dinormalkan (geser) untuk mendapatkan nilai mantissa dan eksponen akhir.
B
|
=
|
(35.625)10
|
=
|
(35)10 + (0.625)10
|
|
=
|
(100011)2 + (0.1001)2
|
|
=
|
(100011.1001)2
|
|
=
|
(1.000111001)2 × 25
|
Dari perhitungan di
atas, nilai eksponen E = 5 + 1023 = 1028 = 10000000100 dan
mantissa M = 000111001, sehingga
diperoleh B = 0x4041C800000000 (Gambar 0.8↓).
Figure 0.8 Contoh
bilangan floating-point 64-bit B = 35.625
Bilangan
floating-point negatif mempunyai bentuk sign-magnitude,
yaitu nilai S menunjukkan tanda sedangkan besar nilai ditunjukkan oleh mantissa
dan eksponennya.
Contoh 7
Nyatakan format
floating-point 32-bit dari bilangan A = − 0.328125
Dari Contoh 0.7↑, nilai bilangan − A = + 0.328125 adalah 0x3FD5000000000000. Dengan mengubah field
S=1, maka bilangan A dinyatakan dengan 0xBFD5000000000000 (Gambar 0.9↓)
Figure 0.9 Bilangan
negatif A = − 0.328125 dinyatakan
dengan 0x3FD5000000000000