SUATU KAJIAN TENTANG FLOATING-POINT
UNTUK CATATAN BAGI PELAKU KOMPUTASI NUMERIK
Oleh: Bandung Arry Sanjoyo, Matematika ITS, 2004.
Bilangan Real
Bilangan real merupakan gabungan dari bilangan rasional dan irasional. Ada yang bernilai negatip dan positip. Dalam kaitannya dengan penyimpanan bilangan riil di komputer, bilangan irasional akan disimpan dalam bentuk pemotongan bilangan tersebut sesuai dengan kapasitas format bilangan riil. Jadi bilangan irasional didekati dengan bilangan rasional yang terdekat (yang bisa disimpan). Bilangan real ini dapat dinyatakan dalam format pecahan desimal, seperti 3141.592653589793 x 10-3. Secara umum bilangan riil dengan basis β dan p digit significan berbentuk :
±d0.d1d2…dp-1 × βe = ±(d0 + d1xβ-1+ d2xβ-2+…+ dP-1xβ-(P-1)); 0≤di<β.
Bilangan riil ini akan disimpan dalam tempat yang terbatas pada beberapa bit. Oleh karena itu digit significan dan eksponen terbatas pada banyaknya tempat yang disediakan atau format tertentu. Bilangan riil yang disimpan dalam format tertentu ini dinamakan floating-point. Jika emin merupakan nilai eksponen minimal dan emax merupakan nilai eksponen maksimal, maka banyaknya bit yang diperlukan untuk penyimpanan floating-point diatas adalah 2log(emax-emin+1) + 2log βp + 1.
Format IEEE 754 Short Real
Organisasi IEEE membuat standart format penyimpanan floating-point binary yang diberi nama standar IEEE 754, sebagaimana yang digunakan oleh prosesor Intel yaitu untuk format 32 bit dan 64 bit. Untuk format 32 bit disebut juga IEEE short real, mempunyai format peyimpanan sebagai berikut.
Lokasi bit diberi nomor indeks 0 – 31 dan bit yang paling signifikan berada dikiri.
Bit Sign
Bit Sign adalah bit nomor indeks 31 yang dipakai untuk tanda plus (+) atau minus (-), 0 berarti plus dan 1 berarti minus.
Bit Mantisa
Bit mantisa disediakan 23 bit, dengan indeks nomor 0 sampai dengan 22. Untuk mengetahui detil dari teknik penyimpanan mantisa, terlebih dahulu kita pahami teng representasi bilangan riil.
Ambil bilangan riil pada basis 10, misal -12.357 x 103 . Sign adalah negatip, 12.357 merupakan mantisa, dan 3 pada bagian pangkat dari 10 merupakan eksponen. Bagian pecahan pada mantisa adalah
.357 = 3/10 + 5/100 + 7/1000
Setiap bilangan riil bentuk a1 a2…am.am+1am+2…an x 10k
dapat dinyatakan dalam bentuk pecahan desimal normal a1.a2…amam+1am+2…an x 10k+m-1, dengan a1 tidak 0. Atau setiap bilangan riil bentuk 0.b1…bma1 a2…an x 10k, dengan bi=0 dapat dinyatakan dalam bentuk pecahan desimal normal a1.a2a3…an x 10k-m-1.
Secara sama untuk bilangan floating-point biner. Ambil contoh bilangan -1000.1001 x 23. Sign adalah negatip, 1000.1001 merupakan mantissa, dan 3 pada bagian pangkat dari 2 merupakan eksponen. Bagian pecahan pada mantisa dapat dinyatakan:
.1001 = 1/2 + 0/4 + 0/8 + 1/16 = 0.5625
Sehingga floating-point biner -1000.1001 dalam bentuk desimal adalah -16.5625 .
Setiap bilangan floating-point biner bentuk a1 a2…am.am+1am+2…an x 2k
dapat dinyatakan dalam bentuk pecahan desimal normal a1.a2…amam+1am+2…an x 2k+m-1, dengan a1 =1. Atau setiap bilangan floating-point biner bentuk 0.b1…bma1 a2…an x 10k, dengan bi=0 dapat dinyatakan dalam bentuk pecahan desimal normal a1.a2a3…an x 10k-m-1, dengan a1 =1. Nilai a1
selalu 1, sehingga dalam penyimpanan pada lokasi mantisa nilai a1
ini tidak perlu disimpan.
Untuk mantisa dengan 23 bit, nilai pecahan terkecil yang dapat direpresentasikan adalah 0.000000000000000000001 atau nilai pecahan desimalnya adalah 1/8388608=0.00000011920928955078125.
Bit Eksponen
Pada IEEE Short Real, peyimpanan nilai eksponen disediakan 8 bit untuk integer positip dengan nilai bias 127. Oleh karena itu nilai yang tersimpan harus tidak ada tanda negatip. Sebagai gambaran ambil bilangan floating-point biner -1.1001 x 25 . Pangkat/eksponen 5 ditambahkan ke nilai bias 127 adalah 132. 132 mempunyai nilai biner 10100010, ini yang disimpan dalam bagian 8 bit eksponent. Contoh lainnya dapat dilihat pada tabel berikut ini.
Floating-Point Biner | Eksponen | Eksponen + 127 | Biner Pada Eksponen |
1.101011x2-127 | -127 | 0 | 00000000 |
1.101011x2-10 | -10 | 117 | 01110101 |
1.101011x2-1 | -1 | 126 | 01111110 |
1.101011 | 0 | 127 | 01111111 |
1.101011x21 | 1 | 128 | 10000000 |
1.101011x2128 | +128 | 255 | 11111111 |
Pangkat terkecil yang bisa disimpan adalah -127 dan pangkat terbesarnya adalah 128. Sehingga nilai floating point biner berkisar antara 1.0 x 2-127 sampai dengan 1.0 x 2+128.
Representasi Floating-Point Dalam IEEE Bit
Setelah melihat rincian dari format IEEE untuk short real, dua contoh berikut ini merupakan pemamparan bilangan floating-point short real yang direpresentasikan pada format IEEE short real di atas.
Contoh 1: Representasi bilangan -1.1001 x 2-1.
Bit sign bernilai 1 (negatip), bit mantissa adalah 10010000000000000000000, dan bit eksponen = 01111110 (yaitu -1+127=126). Nilai "1" pada bagian kiri titik desimal tidak perlu disimpan. Sehingga bentuk representasi penyimpanannya adalah.
Representasi bit IEEE 754 short real untuk bilangan -1.1001 x 2-1.
Contoh 2: Representasi bilangan 1.0111 x 2-10.
Bit sign bernilai 0 (positip), bit mantissa adalah 01110000000000000000000, dan bit eksponen = 01110101 (yaitu -10+127=117). Nilai "1" pada bagian kiri titik desimal tidak perlu disimpan. Sehingga bentuk representasi penyimpanannya adalah.
Representasi bit IEEE 754 short real untuk bilangan 1.0111 x 2-10.
Bilangan Terkecil Yang Lebih Besar x
Dalam sistem bilangan riil, bilangan riil x dan bilangan riil y sesudah x adalah konsekutif (padat). Dan bahkan nilai y tidak bisa disebut. Lain halnya dengan bilangan floating-point. Jika x adalah floating point biner yang direpresentasikan dalam IEEE short real, maka bilangan terkecil yang lebih besar dari x yang dapat direpresentasikan dalam IEEE short real adalah x+eps. Dimana nilai eps adalah.
0.00000000000000000000001 = 1/8388608=1/2^23=0.00000011920928955078125
Untuk floating point 64 bit, nilai eps adalah:
0.0000000000000000000000000000000000000000000000000001=
=1/4503599627370496 = 1/252
=0.0000000000000002220446049250313
Sebagai contoh x=0.5 atau dalam biner x = 0.1 = 1.0x2-1. Bilangan terkecil yang lebih besar dari x adalah
y = 1.0x2-1 + eps
= 1.00000000000000000000001x2-1
= 0.500000119209289
Dari sini terlihat bahwa bilangan riil 0.5 < x < 0.500000119209289 pada
basis 10 tidak dapat direpresentasikan dalam IEEE short real. Muncul suatu permasalahan, jika x merupakan bilangan riil pada basis 10 maka apakah x dapat direpresentasikan dalam IEEE short real (secara tepat) ?.
Merubah Pecahan Desimal ke Real Binary
Jika pecahan desimal dapat dinyatakan sebagai jumlahan pecahan dalam bentuk 1/2 + 1/4 + 1/8 + ... , maka secara langsung kita dapat menentukan real binary yang bersesuaian. Lihat contoh berikut ini.
Pecahan Desimal | Difaktorkan | Real Binary |
1/2 | ½ | .1 |
1/4 | ¼ | .01 |
3/4 | 1/2 + 1/4 | .11 |
1/8 | 1/8 | .001 |
7/8 | 1/2 + 1/4 + 1/8 | .111 |
3/8 | 1/4 + 1/8 | .011 |
1/16 | 1/16 | .0001 |
3/16 | 1/8 + 1/16 | .0011 |
5/16 | 1/4 + 1/16 | .0101 |
Menyatakan bilangan real umumnya tidak sederhana. Pecahan 1/5 (atau 0.2) harus dinyatakan dengan jumlahan pecahan yang penyebutnya adalah pangkat dari 2. Tampilan berikut ini merupakan hasil dari hitungan program yang melakukan pengurangan o.2 dengan setiap pecahan (1/2i) dan menampilkan sisanya. Setelah pengurangan yang ke 23 (bit mantissa 23), nilai eksak tidak didapatkan. Akan tetapi, hasilnya akurat sampai dengan 7 digit. Pada baris-baris kosong, menunjukan pecahan (1/2i) terlalu besar untuk dikurangkan dari sisanya. Sebagai contoh pada baris (bit) , nilai pecahan adalah (1/2) atau 0.5, ini terlalu besar untuk mengurangi 0.2.
starting: 0.200000000000
1
2
3 subtracting 0.125000000000
remainder = 0.075000000000
4 subtracting 0.062500000000
remainder = 0.012500000000
5
6
7 subtracting 0.007812500000
remainder = 0.004687500000
8 subtracting 0.003906250000
remainder = 0.000781250000
9
10
11 subtracting 0.000488281250
remainder = 0.000292968750
12 subtracting 0.000244140625
remainder = 0.000048828125
13
14
15 subtracting 0.000030517578
remainder = 0.000018310547
16 subtracting 0.000015258789
remainder = 0.000003051758
17
18
19 subtracting 0.000001907349
remainder = 0.000001144409
20 subtracting 0.000000953674
remainder = 0.000000190735
21
22
23 subtracting 0.000000119209
remainder = 0.000000071526
Mantissa: .00110011001100110011001
Sebagian besar operasi floating-point dilakukan dengan cara pendekatan.
artikel yang menarik, kami juga punya artikel tentang 'floating point' silahkan buka link ini
ReplyDeletehttp://repository.gunadarma.ac.id/bitstream/123456789/2419/1/03-01-013.pdf
semoga bermanfaat ya