Email : wawans57@yahoo.com
pin : 29a1822c
Bilangan yang mempunyai nilai
pecahan (misalnya 3.2575) dapat direpresentasikan dengan dua format
bilangan: fixed-point dan floating-point.
Bilangan pecahan fixed-point
mempunyai jangkauan yang dibatasi oleh jumlah digit signifikan yang digunakan
untuk merepresentasikan bilangan tersebut. Misalnya bilangan pecahan desimal
sepuluh digit. Bilangan tersebut dinyatakan dengan fixed-point, yaitu satu
digit untuk tanda, empat digit untuk angka utuh dan lima digit untuk angka
pecahan. Jangkauan bilangan tersebut adalah 0 sampai 9999 untuk angka utuh dan
0.00001 sampai 0.99999 untuk angka pecahan, sehingga nilai bilangan yang
mungkin adalah -9999.99999 sampai +9999.99999 dengan presisi 0.00001. Contoh
bilangan tersebut yang valid adalah -9.00102 dan 100.99998. Bilangan ±10000
tidak bisa dinyatakan dengan sistem bilangan sepuluh digit ini. Sedangkan
bilangan 0.000005 tidak memenuhi derajat presisi yang diinginkan, walaupun
berada dalam jangkauan bilangan. Bilangan tersebut akan dibulatkan ke 0.00000
atau 0.00001, yang berarti ada selisih sebesar ±0.000005 dari nilai yang
diinginkan.
Dalam aplikasi saintifik, mungkin
akan terdapat bilangan yang sangat besar atau sangat kecil. Bilangan tersebut
harus dapat direpresentasikan dengan tepat (presisi), yaitu menggunakan floating-point.
Bilangan floating-point direpresentasikan dengan mantissa yang
berisi digit signifikan dan eksponen dari radix R
Format: mantisa × Reksponen
Represensasi bilangan floating-point
seringkali dinormalisasi terhadap radixnya, misalnya 1, 5 × 1044atau
1, 253 × 10 − 36
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).
Di bab ini hanya dibahas tentang format dasar, yaitu 32-bit dan 64-bit.
- 1 bit tanda (S),
- 8 bit eksponen (E), dan
- 23 bit untuk mantisa (M)
Format bilangan floating-point
32-bit Figure 0.1
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)
|
Nilai eksponen di format
floating-point 32-bit Table 0.1
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
Contoh bilangan floating-point
32-bit Figure 0.2 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:
Contoh bilangan floating-point
32-bit Figure 0.3 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↓).
Contoh bilangan floating-point
32-bit Figure 0.4 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↓)
Bilangan negatif Figure 0.5 A
= − 0.21875 dinyatakan dengan 0xBE600000
- 1 bit tanda (S),
- 11 bit eksponen (E), dan
- 52 bit untuk mantisa (M)
Format bilangan floating-point
64-bit Figure 0.6
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)
|
Nilai eksponen di format
floating-point 64-bit Table 0.2
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
Contoh bilangan floating-point
64-bit Figure 0.7 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↓).
Contoh bilangan floating-point
64-bit Figure 0.8 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↓)
Bilangan negatif Figure 0.9 A
= − 0.328125 dinyatakan dengan 0x3FD5000000000000
- Nyatakan bilangan pecahan desimal dari bilangan floating-point A = 0xCF200000
- Hitung nilai maksimal bilangan floating-point 32-bit normal
- Hitung nilai minimal dan maksimal bilangan floating-point 32-bit subnormal
- Nyatakan bilangan (3.5)10 dalam format single
Tidak ada komentar:
Posting Komentar