Anda di halaman 1dari 26

EC3003 - Sistem Komputer

Bagian 4
Floating Point

Departemen Teknik Elektro Institut Teknologi Bandung


2005
Pembahasan

Bilangan pecahan biner


Representasi floating point standar IEEE 754
Pengkodean floating point
ƒ Normalized
ƒ Denormalized
ƒ Nilai khusus
Rounding
Operasi floating point
Floating point pada C

Floating Point 4-2


Bilangan Pecahan Biner
2i
ƒ Representasi bilangan :
2i–1
i
∑ bk ⋅2
k
b=
4 k =− j
••• binary point
2
1 ƒ Bit sebelah kiri binary point
merepresentasikan bobot 2k
bi bi–1 • • • b2 b1 b0 . b–1 b–2 b–3 • • • b–j
ƒ Bit sebelah kanan binary
1/2 point merepresentasikan
1/4 •••
bobot 2-k
1/8

2–j
Contoh :
101.112 merepresentasikan bilangan 1 x 22 + 0 x 21 + 1 x 20 + 1 x 2-1 + 1 x 2-2
=4+0+1+½+¼
= 5¾
Floating Point 4-3
Bilangan Pecahan Biner

Menggeser binary point ke kiri → membagi dengan 2


ƒ sama dengan shift kanan
ƒ contoh : 101.112 = 5 ¾
10.1112 = 2 + 0 + ½ + ¼ + 1/8 = 2 7/8

Menggeser binary point ke kanan → mengalikan dengan 2


ƒ sama dengan shift kiri
ƒ contoh : 1011.12 = 8 + 0 + 2 + 1 + ½ = 11½

Bilangan mendekati 1 memiliki bentuk 0.111111…2


ƒ Contoh : 63/64 = 1/2+1/4+1/8+1/16+1/32+1/64 = 0.1111112
ƒ Direpresentasikan dengan notasi 1.0 – ε

Floating Point 4-4


Keterbatasan Pecahan Biner

Memiliki panjang kode terbatas


ƒ Tidak dapat merepresentasikan bilangan 1/3 secara eksak
ƒ Dapat mereprentasikan secara eksak bila berbentuk x x 2y
ƒ Bilangan lain harus mengulangi representasi bit berkali-kali

Nilai Representasi
1/3 0.0101010101[01]…2
1/5 0.001100110011[0011]…2
1/10 0.0001100110011[0011]…2

Akurasi dapat dinaikkan dengan menambah bit, tetapi tetap saja tidak
dapat merepresentasikan secara eksak

Floating Point 4-5


Bilangan Floating Point

Merupakan aproksimasi dari bilangan real


ƒ Merepresentasikan bilangan real dalam bentuk V = x x 2y
ƒ Tidak selalu memberikan hasil eksak, dapat terjadi pembulatan

Digunakan dalam melakukan komputasi :


ƒ bilangan sangat besar (|V | » 0), dan
ƒ bilangan sangat dekat dengan nol (|V | « 1)

Pecahan biner tidak efisien dalam mengkodekan bilangan bernilai besar


ƒ Contoh : 5 x 2100 tersusun atas pola bit 101 diikuti 100 buah nol

Floating Point 4-6


Floating Point Standar IEEE
Ide
ƒ Bentuk V = x x 2y ingin direpresentasikan dengan hanya memberikan
nilai x dan y-nya saja

Representasi floating point standar IEEE 754


V = (–1)s x M x 2E
ƒ Bit tanda s menentukan apakah bilangan negatif (s=1) atau positif (s=0)
ƒ Signifikan M adalah bilangan pecahan, berkisar antara 1 dan 2 – ε atau
antara 0 dan 1 – ε
ƒ Eksponen E adalah bobot nilai bilangan

Standar IEEE 754


ƒ Ditentukan tahun 1985
ƒ Bentuk standar aritmetika floating point
ƒ Sebelumnya, terdapat berbagai macam format
ƒ Didukung oleh seluruh CPU

Floating Point 4-7


Pengkodean Floating Point
Representasi floating point IEEE
ƒ V = (–1)s x M x 2E

Kode biner floating point

s exp frac

1 bit k bit n bit


ƒ s (sign) sepanjang satu bit mengkodekan bit tanda s
ƒ exp (exponent) sepanjang k bit mengkodekan eksponen E
ƒ frac (fraction) sepanjang n bit mengkodekan signifikan M

Ukuran (tipe data float pada C)


ƒ Single precision : s=1 bit, exp=8 bit , frac=23 bit → total 32 bit
ƒ Double precision : s=1 bit, exp=11 bit, frac=52 bit → total 64 bit

Floating Point 4-8


3 Kasus Kode Floating Point

Berdasarkan pola bit exp, pengkodean floating point


dibagi menjadi tiga kasus :
ƒ Nilai normalized
ƒ Kasus paling umum
ƒ Bila bit-bit exp tidak semua nol (exp ≠ 000…0) atau tidak
semua satu (exp ≠ 111…1)
ƒ Nilai denormalized
ƒ Bila bit-bit exp semuanya nol (exp = 000…0)
ƒ Nilai khusus
ƒ Bila bit-bit exp semuanya satu (exp = 111…1)

Floating Point 4-9


Nilai Normalized
Berlaku untuk kondisi exp ≠ 000…0 dan exp ≠ 111…1
Eksponen E diinterpretasikan dalam bentuk bias
E = e – bias
ƒ e : nilai unsigned yang dikonversikan langsung dari exp
ƒ bias : nilai bias = 2k-1 – 1, dimana k adalah banyaknya bit exp
ƒ single precision : bias = 127, e = 1 s/d 254, E = -126 s/d 127
ƒ double precision : bias = 1023, e = 1 s/d 2046, E = -1022 s/d 1023)

Signifikan M adalah bilangan pecahan


M = 1+f
ƒ pecahan f = 0.xxx…x2, dimana x adalah bit-bit pada frac
ƒ M berkisar antara 1.0 (frac= 000…0) s/d 2.0 – ε (frac = 111…1 )

s exp frac

1 bit k bit n bit

Floating Point 4-10


Nilai Denormalized
Berlaku untuk kondisi exp = 000…0
Nilai kode
ƒ eksponen E = 1 – bias
ƒ bias = 2k-1 – 1, dimana k adalah banyaknya bit exp
ƒ signifikan M = f
ƒ pecahan f = 0.xxx…x2, dimana x adalah bit-bit pada frac

Kasus denormalized
ƒ exp = 000…0, frac = 000…0
ƒ Merepresentasikan nilai 0
ƒ Terdapat perbedaan antara nilai +0 and –0, berdasarkan nilai bit s
ƒ exp = 000…0, frac ≠ 000…0
ƒ Bilangan yang sangat dekat dengan 0.0
ƒ Sifat gradual underflow, semakin kecil semakin presisi

s exp frac

1 bit k bit n bit

Floating Point 4-11


Nilai Khusus
Berlaku untuk kondisi exp = 111…1
Kasus :
exp = 111…1, frac = 000…0
ƒ Merepresentasikan nilai ∞ (tak hingga/infinity)
ƒ positif +∞ bila s=0 dan negatif –∞ bila s=1
ƒ Hasil operasi yang mengalami overflow
ƒ Hasil kali dua bilangan sangat besar
ƒ Pembagian dengan nol (1.0/0.0 = −1.0/−0.0 = +∞, 1.0/−0.0 = −∞)
exp = 111…1, frac ≠ 000…0
ƒ Disebut Not-a-Number (NaN)
ƒ Merepresentasikan situasi dimana tidak ada nilai numeriknya
ƒ Contoh : sqrt(–1), ∞ − ∞

s exp frac

1 bit k bit n bit

Floating Point 4-12


3 Kasus Kode Floating Point

Ringkasan pengkodean bilangan real floating point :


1. Normalized
2. Denormalized
3. Nilai khusus
ƒ Tak hingga (infinity)
ƒ Not a Number

−∞ -Normalized -Denorm +Denorm +Normalized +∞

NaN NaN
−0 +0

Floating Point 4-13


Distribusi Nilai
Misalkan : floating point 6 bit, format menyerupai IEEE
ƒ sign s = 1 bit, eksponen exp = 3 bit, pecahan frac = 2 bit

Seluruh range nilai :

-15 -10 -5 0 5 10 15

Nilai antara -1.0 hingga +1.0 :

-1 -0,5 0 0,5 1
-15 -10 -5 0 5 10 15
Denormalized Normalized Infinity

Perhatikan : distribusi semakin padat ketika mendekati nol

Floating Point 4-14


Contoh Kode Floating Point
1/4
Diberikan representasi floating point 8-bit (tiny)
ƒ Satu bit tanda s terletak di most significant bit
ƒ Empat bit berikutnya adalah eksponen exp
ƒ Tiga bit terakhir adalah frac

7 6 3 2 0
s exp frac

Bentuk menyerupai format IEEE


ƒ Terdapat kasus normalized, denormalized
ƒ Terdapat representasi untuk nol, tak hingga dan NaN
ƒ Representasi nilai dihitung : V = (–1)s x M x 2E
ƒ dimana M diturunkankan dari frac dan E diturunkan dari exp

Floating Point 4-15


Contoh Kode Floating Point
2/4
exp e E 2E kasus

0000 0 -6 1/64 denormalized


0001 1 -6 1/64 normalized
0010 2 -5 1/32
0011 3 -4 1/16
0100 4 -3 1/8
0101 5 -2 1/4 Perhitungan nilai E
0110 6 -1 1/2 denormalized : E = 1 - bias
0111 7 0 1
normalized : E = e - bias
1000 8 +1 2
1001 9 +2 4
1010 10 +3 8 bias = 2k-1 – 1 = 24-1 – 1 = 7
1011 11 +4 16
1100 12 +5 32
1101 13 +6 64
1110 14 +7 128 normalized
1111 15 - - inf, NaN

Floating Point 4-16


Contoh Kode Floating Point
3/4
exp frac f M kasus

0000 000 0 0
0000 001 1/8 1/8
0000 010 2/8 2/8
… denormalized
0000 110 6/8 6/8
0000 111 7/8 7/8 Perhitungan nilai M
0001 000 0 8/8
0001 001 1/8 9/8 denormalized : M = f
… normalized : M = 1 + f
0110 111 7/8 15/8 f = 0.xxx2, x adalah bit-bit frac
0111 000 0 8/8
0111 001 1/8 9/8
… normalized
1110 110 6/8 14/8
1110 111 7/8 15/8
1111 000 - - tak hingga

Floating Point 4-17


Contoh Kode Floating Point
4/4
s exp frac Perhitungan nilai V = (–1)s x M x 2E

0 0000 000 0
0 0000 001 1/8*1/64 = 1/512 bilangan terdekat ke nol
0 0000 010 2/8*1/64 = 2/512

0 0000 110 6/8*1/64 = 6/512
0 0000 111 7/8*1/64 = 7/512 bilangan denormalized terbesar
0 0001 000 8/8*1/64 = 8/512 Bilangan normalized terkecil
0 0001 001 9/8*1/64 = 9/512

0 0110 111 15/8*1/2 = 15/16 terdekat ke 1 (dr bawah)
0 0111 000 8/8*1 = 1
0 0111 001 9/8*1 = 9/8 terdekat ke 1 (dari atas)

0 1110 110 14/8*128 = 224
0 1110 111 15/8*128 = 240 bilangan normalized terbesar
0 1111 000 + tak hingga

Floating Point 4-18


Nilai Single Precision (float)
Single precision : s=1 bit, exp=8 bit , frac=23 bit → total 32 bit

Deskripsi exp frac Nilai Numerik


Zero 00…00 00…00 0.0

Denorm pos terkecil 00…00 00…01 2– 23 X 2–126


≈ 1.4 X 10–45

Denorm terbesar 00…00 11…11 (1.0 – ε) X 2–126


≈ 1.2 X 10–38

Norm pos terkecil 00…01 00…00 1.0 X 2–126


≈ 1.2 X 10–38

Satu 01…11 00…00 1.0

Normalized terbesar 11…10 11…11 (2.0 – ε) X 2127


≈ 3.4 X 1038

Floating Point 4-19


Integer ke Floating Point
Konversi integer ke format floating point single precision

1234510 = 0x3039 = 110000001110012 = 1.10000001110012 X 213


ƒ normalisasi bilangan dengan shift 13 posisi ke kanan binary point
Konstruksi bagian frac (23 bit)
ƒ ambil signifikan M = 1.10000001110012
ƒ frac = 100000011100100000000002
ƒ frac diperoleh dengan membuang bit 1 di depan dan menambah 10 buah nol
Konstruksi bagian exp (8 bit)
ƒ bias = 127; E = 13; e = E + bias = 140; diperoleh exp = 100011002

Reprensentasi floating point : 12345.0 = 0x4640E400


Heksa 4 6 4 0 E 4 0 0
Biner 0100 0110 0100 0000 1110 0100 0000 0000
1 bit tanda 8 bit exp 23 bit frac

Floating Point 4-20


Operasi Floating Point
Konsep operasi floating point
1. Hitung hasil eksak
2. Cocokan hasil dengan tingkat kepresisian yang diinginkan
ƒ Dapat terjadi overflow jika eksponen terlalu besar
ƒ Dapat terjadi pembulatan agar cocok dengan nilai frac

Metoda pembulatan (rounding)


1.40 1.60 1.50 2.50 –1.50
ƒ Zero 1 1 1 2 –1
ƒ Round down (-∞) 1 1 1 2 –2
ƒ Round up (+∞) 2 2 2 3 –1
ƒ Nearest Even (default) 1 2 2 2 –2
Catatan :
zero = pembulatan ke arah nol; round down = pembulatan ke bawah;
round up = pembulatan ke atas; nearest even = pembulatan terdekat

Floating Point 4-21


Pembulatan Nearest Even

Mode pembulatan standar (default)


Pembulatan ke nilai terdekat
Jika bilangan berada tepat ditengah-tengah antara dua
nilai yang mungkin → bulatkan sehingga nilai digit
terkecil menjadi genap

Contoh : pembulatan ke per seratus terdekat


1.2349999 1.23 (kurang dari setengah)
1.2350001 1.24 (lebih besar dari setengah)
1.2350000 1.24 (nilai tengah, bulatkan ke atas)
1.2450000 1.24 (nilai tengah, bulatkan ke bawah)

Floating Point 4-22


Pembulatan Bilangan Biner

Bilangan pecahan biner


ƒ Bernilai “genap” jika least significant bit = 0
Contoh : Pembulatan ke 1/4 terdekat (2 bit di kanan binary point)

Nilai Biner Pembulatan Hasil Nilai akhir


2 3/32 10.000112 < nilai tengah, bulat terdekat 10.002 2
2 3/16 10.001102 > nilai tengah, bulat terdekat 10.012 2 1/4
2 7/8 10.111002 nilai tengah, bulat ke genap 11.002 3
2 5/8 10.101002 nilai tengah, bulat ke genap 10.102 2 1/2

Floating Point 4-23


Floating Point pada C
Bahasa C memiliki dua format floating point :
float single precision (32 bit)
double double precision (64 bit)
Casting antara format int, float, dan double mengubah nilai
numerik dan representasi bit-nya :
ƒ Dari int ke float
ƒ Bilangan tidak akan overflow, tetapi dapat mengalami pembulatan
ƒ Dari int atau float ke double
ƒ Konversi secara eksak, double memiliki range dan presisi lebih besar
ƒ Dari double ke float
ƒ Dapat mengalami overflow (+∞ atau −∞)
ƒ Dapat juga terjadi pembulatan, karena presisi lebih rendah
ƒ Dari double atau float ke int
ƒ Memotong bagian pecahan, mendekati nol, beda dengan rounding

Floating Point 4-24


Ariane 5

ƒ Meledak 37 detik setelah


peluncuran
ƒ Membawa muatan, satelit
seharga 500 juta dollar
Mengapa terjadi kegagalan ?
ƒ Perhitungan kecepatan
horisontal dilakukan dalam
bilangan floating point
ƒ Dikonversi ke integer 16-bit
ƒ Bekerja baik pada Ariane 4
ƒ Pada Ariane 5 terjadi overflow
ƒ Ariane 5 menggunakan
perangkat lunak yang sama
dengan Ariane 4, padahal
kecepatan geraknya lima kali
lebih tinggi dari Ariane 4

Floating Point 4-25


Ringkasan

Floating point standar IEEE digunakan untuk merepresentasikan


bilangan real dalam bentuk V = (–1)s x M x 2E

Floating point digunakan untuk melakukan komputasi bilangan


sangat besar (|V | » 0), dan bilangan sangat dekat dengan nol
(|V | « 1)

Floating point dikodekan dalam tiga kasus : untuk nilai


denormalized, normalized dan nilai khusus (tak hingga dan NaN)

Hasil operasi floating point dapat mengalami pembulatan


(rounding)

Floating Point 4-26