Floating Point
STEI – Institut Teknologi Bandung
Pembahasan g pecahan p Bilangan 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 2i–1
Representasi bilangan : i
• • • bi bi–1 • • •
binary point
b2 b1 b0 .b–1 b–2 b–3 1/2 / 1/4 1/8
• • • • • •
4 2 1
b=
b–j
∑ bk ⋅2
k
k =− j
Bit sebelah b l h kiri k binary b point merepresentasikan bobot 2k Bit sebelah kanan binary point merepresentasikan bobot 2-k
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 g shift kiri contoh : 1011.12 = 8 + 0 + 2 + 1 + ½ = 11½
Bilangan a ga mendekati d a 1 memiliki bentuk b u 0.111111… 0 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 j g kode terbatas Memiliki p panjang Tidak dapat merepresentasikan bilangan 1/3 secara eksak Dapat mereprentasikan secara eksak bila berbentuk
x x 2y
Bilangan Bil lain l i harus h mengulangi l i representasi t i bit berkali-kali b k li k li
Nilai 1/3 1/5 1/10
Representasi 0.0101010101[01]…2 0.001100110011[0011]…2 0.0001100110011[0011] 2 0.0001100110011[0011]…
Akurasi dapat dinaikkan dengan menambah bit, tetapi tetap saja tidak dapat merepresentasikan secara eksak
Floating Point
4-5
Bilangan Floating Point p p g real Merupakan aproksimasi dari bilangan 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) ( 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 1 bit
exp k bit
frac n bit
s (sign g ) sepanjang p j g satu bit mengkodekan g bit tanda s exp (exponent) sepanjang k bit mengkodekan eksponen E frac (fraction) sepanjang n bit mengkodekan signifikan M
Ukuran (tipe data float fl t 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 K Kasus paling li 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 k Ed diinterpretasikan k dalam d l bentuk b k bias b 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…x 0.xxx x2, dimana x adalah bit bit-bit bit pada frac M berkisar antara 1.0 (frac= 000…0) s/d 2.0 – ε (frac = 111…1 ) s
exp p
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
e p = 000…0, exp 000 0 frac = 000…0 000 0 Merepresentasikan nilai 0 Terdapat perbedaan antara nilai +0 and –0, berdasarkan nilai bit s
exp = 000…0, frac ≠ 000…0
Bilangan Bil yang sangatt dekat d k td dengan 0.0 00 Sifat gradual underflow, semakin kecil semakin presisi
s
exp p
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)
positiff +∞ bila b l s=0 0 dan d negatiff –∞ bila b l 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 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 p
frac
1 bit
k bit
n bit
Floating Point
4-12
3 Kasus Kode Floating Point Ringkasan g pengkodean p g bilangan g real floating g point p : 1. Normalized 2. Denormalized 3 Nilai khusus 3. −∞
Tak hingga (infinity) Not a Number
-Normalized
NaN
Floating Point
+Denorm
-Denorm −0
+Normalized
+∞ NaN
+0
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 -15
-10
-0,5
-5 D Denormalized li d
0 0
5
0,5
N Normalized li d
Infinity f
1 15
10
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
s
0
3 2
exp
frac
Bentuk menyerupai format IEEE Terdapat kasus normalized, denormalized Terdapat T d t representasi t i untuk t k nol, l ttakk hi hingga dan d NaN N N 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
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-6 -6 -5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5 +6 +7 7 -
1/64 1/64 1/32 1/16 1/8 1/4 1/2 1 2 4 8 16 32 64 128 -
Floating Point
kasus denormalized normalized
Perhitungan nilai E denormalized : E = 1 - bias normalized : E = e - bias bias = 2k-1 – 1 = 24-1 – 1 = 7
normalized li d inf, NaN 4-16
Contoh Kode Floating Point 3/4 exp frac
f
M
0000 0000 0000 … 0000 0000 0001 0001 … 0110 0111 0111 … 1110 1110 1111
0 1/8 2/8
0 1/8 2/8
000 001 010
kasus
denormalized 110 111 000 001
6/8 7/8 0 1/8
6/8 7/8 8/8 9/8
111 000 001
7/8 0 1/8
15/8 8/8 9/8
Perhitungan nilai M denormalized : M = f normalized : M = 1 + f f = 0.xxx2, x adalah bit-bit frac normalized
110 111 000
Floating Point
6/8 7/8
14/8 15/8
-
-
tak hingga 4-17
Contoh Kode Floating Point 4/4 s exp frac 0 0 0 … 0 0 0 0 … 0 0 0 … 0 0 0
Perhitungan nilai V =
0000 000 0000 001 0000 010
0
0000 0000 0001 0001
6/8*1/64 7/8*1/64 8/8*1/64 9/8*1/64
110 111 000 001
1/8*1/64 = 1/512 2/8*1/64 = 2/512 = = = =
6/512 7/512 8/512 9/512
0110 111 0111 000 0111 001
15/8*1/2 = 15/16 8/8*1 8/8 1 = 1 9/8*1 = 9/8
1110 110 1110 111 1111 000
14/8*128 = 224 15/8*128 / = 240 + tak hingga
Floating Point
(–1)s
xMx
2E
bilangan terdekat ke nol
bilangan denormalized terbesar Bilangan g normalized terkecil
terdekat ke 1 (dr bawah) terdekat ke 1 (dari atas)
bilangan normalized terbesar
4-18
Nilai Single Precision (float) Single precision : s=1 bit, exp=8 bit , frac=23 bit → total 32 bit
D k i i Deskripsi
exp
Zero
00…00 00…00
0.0
Denorm pos terkecil k il
00…00 00…01
126 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 1 2 X 10–38
Satu
01…11 00…00
1.0
Normalized terbesar
11 10 11…11 11…10 11 11
(2.0 (2 0 – ε)) X 2127 ≈ 3.4 X 1038
Floating Point
f frac
Nil i Numerik Nilai N ik
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
K Konstruksi t k i bagian b i exp (8 bit) bias = 127; E = 13; e = E + bias = 140; diperoleh exp = 100011002
Reprensentasi floating point : 12345.0 = 0x4640E400 Heksa Biner
4 6 4 0 E 4 0 0 0100 0110 0100 0000 1110 0100 0000 0000
1 bit tanda Floating Point
8 bit exp
23 bit frac 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 40 Zero 1 Round down (-∞) 1 Round up (+∞) 2 Nearest Even (default) 1
1.60 1 60 1 1 2 2
1.50 1 50 1 1 2 2
2.50 2 50 2 2 3 2
–1.50 –1 50 –1 –2 –1 –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 p pembulatan standar (default) Pembulatan ke nilai terdekat Jika bilangan berada tepat ditengah-tengah antara dua nilai il i yang mungkin ki → bulatkan b l tk sehingga hi nilai il i digit di it terkecil menjadi genap Contoh : pembulatan ke per seratus terdekat 1.2349999 1.2350001 1.2350000 1.2450000
Floating Point
1.23 1.24 1.24 1.24
(kurang dari setengah) (lebih besar dari setengah) (nilai tengah, bulatkan ke atas) ((nilai tengah, g , bulatkan ke bawah))
4-22
Pembulatan Bilangan Biner Bilangan pecahan biner Bernilai Be nil i “genap” “gen p” jika jik least le t significant ignifi nt bit = 0
Contoh : Pembulatan ke 1/4 terdekat (2 bit di kanan binary point) Nilai Biner 2 3/32 10.000112 2 3/16 10.001102 2 7/8 10.111002 2 5/8 10.101002
Floating Point
Pembulatan < nilai tengah, bulat terdekat > nilai tengah, bulat terdekat nilai tengah, bulat ke genap nilai tengah, bulat ke genap
Hasil Nilai akhir 10.002 2 10.012 2 1/4 11.002 3 10.102 2 1/2
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 bit nya : Dari int ke float Bilangan tidak akan overflow, tetapi dapat mengalami pembulatan
Dari D i int atau t float ke k 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 reall dalam bentuk bil d l b t k V = (–1) ( 1)s x M x 2E Floating point digunakan untuk melakukan komputasi bilangan sangat besar (|V | » 0) 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