Monday, January 05, 2009

Floating Point 754

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.d1d2dp-1 × βe = ±(d0 + d1-1+ d2-2+…+ dP-1-(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
menjadi

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.


1 comment:

  1. artikel yang menarik, kami juga punya artikel tentang 'floating point' silahkan buka link ini
    http://repository.gunadarma.ac.id/bitstream/123456789/2419/1/03-01-013.pdf
    semoga bermanfaat ya

    ReplyDelete