Floating Point
Floating Point
Pembahasan
Bilangan pecahan biner
g
p
Representasi floating point standar IEEE 754
Pengkodean floating point
Normalized
Denormalized
Nilai khusus
Rounding
Operasi floating point
Floating point pada C
Bilangan Pecahan Biner
Representasi bilangan : 2i–1 2i b = b l h k b 2 4 • • • binary point bk ⋅2k k=− j i∑
Bit sebelah kiri binary point merepresentasikan bobot 2k
Bit sebelah kanan binary point merepresentasikan bi bi–1 • • • b2 b1 b0
.
b–1b–2b–3 • • • b–j 1 1/2 point merepresentasikan bobot 2-k • • • / 1/4 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 + ½ + ¼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 kirig
contoh : 1011.12 = 8 + 0 + 2 + 1 + ½ = 11½
Bilangan mendekati 1 memiliki bentuk 0.111111…
a ga
d a
b
u 0
22 Contoh : 63/64 = 1/2+1/4+1/8+1/16+1/32+1/64 = 0.1111112
Keterbatasan Pecahan Biner
Memiliki
panjang kode terbatas
p
j
g
Tidak dapat merepresentasikan bilangan 1/3 secara eksak
Dapat mereprentasikan secara eksak bila berbentuk
x
x2
yBil
l i h
l
i
t i bit b k li k li
Bilangan lain harus mengulangi representasi bit berkali-kali
Nilai
Representasi
1/3
0.0101010101[01]…
21/5
0.001100110011[0011]…
21/10
0.0001100110011[0011]
21/10
0.0001100110011[0011]…
2Akurasi dapat dinaikkan dengan menambah bit, tetapi tetap saja tidak dapat merepresentasikan secara eksak
Bilangan Floating Point
Merupakan aproksimasi dari bilangan real
p
p
g
Merepresentasikan bilangan real dalam bentuk
V
=
x
x2
y
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
Pecahan biner tidak efisien dalam mengkodekan bilangan bernilai besar
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)
M
2
EV =
(–1)
sx
M
x 2
E 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
Standar IEEE 754
Ditentukan tahun 1985
Bentuk standar aritmetika floating point
Sebelumnya, terdapat berbagai macam formatSebelumnya, terdapat berbagai macam format Didukung oleh seluruh CPU
Pengkodean Floating Point
Representasi floating point IEEE
V =
(–1)
sx
M
x 2
EKode biner floating point
s exp frac
s (sign) sepanjang satu bit mengkodekan bit tanda s
s exp frac
1 bit k bit n bit
( g ) p j g g
exp (exponent) sepanjang k bit mengkodekan eksponen E frac (fraction) sepanjang n bit mengkodekan signifikan M
Ukuran (tipe data fl t pada C)
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
3 Kasus Kode Floating Point
Berdasarkan pola bit exp, pengkodean floating point
dibagi menjadi tiga kasus :
Nilai
normalized
K
li
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
Nilai khusus
Nilai
Normalized
Berlaku untuk kondisi
exp
≠ 000…0
dan
exp
≠ 111…1
k
d
k
d l
b
k b
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
pecahanpecahan ff = 0.xxx x0.xxx…x22, dimana x adalah bit-bit pada frac, dimana x adalah bit bit pada frac
M berkisar antara 1.0 (frac= 000…0) s/d 2.0 – ε (frac = 111…1 )
Nilai
Denormalized
Berlaku untuk kondisi
exp = 000…0
Nilai kode
Nilai kode
eksponen E = 1 – bias
bias = 2k-1 – 1, dimana k adalah banyaknya bit exp
signifikansignifikan MM f= f
pecahan f = 0.xxx…x2, dimana x adalah bit-bit pada frac
Kasus
denormalized
e p = 000 0 frac = 000 0 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
Bil t d k t d 0 0
Bilangan yang sangat dekat dengan 0.0
Sifat gradual underflow, semakin kecil semakin presisi
Nilai Khusus
Berlaku untuk kondisi
exp = 111…1
Kasus :
Kasus :
exp
= 111…1, frac = 000…0
Merepresentasikan nilai
∞
(tak hingga/infinity)f b l 0 d f b l
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 =∞)
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 Merepresentasikan situasi dimana tidak ada nilai numeriknya
Contoh : sqrt(–1), ∞ − ∞
3 Kasus Kode Floating Point
Ringkasan pengkodean bilangan real floating point :
g
p g
g
g p
1.
Normalized
2.
Denormalized
3
Nilai khusus
3.
Nilai khusus
Tak hingga (infinity) Not a Number
+∞
−
∞
-Normalized -Denorm +Denorm +NormalizedNaN
NaN −0
Distribusi Nilai
Misalkan : floating point 6 bit, format menyerupai IEEE
sign s = 1 bit, eksponen exp = 3 bit, pecahan frac = 2 bitsign 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 :
-15 -10 -5 0 5 10 15
D li d N li d
f
-1 -0,5 0 0,5 1
Perhatikan :
distribusi semakin padat ketika mendekati nol
Denormalized Normalized
Infinity
Contoh Kode Floating Point
Diberikan representasi floating point 8-bit (tiny)
Satu bit tanda s terletak di most significant bit
1/4
Satu bit tanda s terletak di most significant bit Empat bit berikutnya adalah eksponen exp
Tiga bit terakhir adalah frac
s exp frac 0 2 3 6 7
Bentuk menyerupai format IEEE
Terdapat kasus normalized, denormalized
T d t t i t k l t k hi d N N
Terdapat representasi untuk nol, tak hingga dan NaN Representasi nilai dihitung : V = (–1)s x M x 2E
Contoh Kode Floating Point
exp
e
E
2
Ekasus
2/4
0000 0 -6 1/64 denormalized 0001 1 -6 1/64 normalized 0010 2 -5 1/32 0011 3 -4 1/16 0011 3 -4 1/16 0100 4 -3 1/8 0101 5 -2 1/4 0110 6 -1 1/2Perhitungan nilai E
denormalized : E = 1 - bias 0111 7 0 1 1000 8 +1 2 1001 9 +2 4 1010 10 +3 8 normalized : E = e - bias bias = 2k-1 – 1 = 24-1 – 1 = 7 1010 10 +3 8 1011 11 +4 16 1100 12 +5 32 1101 13 +6 64 bias 2 1 2 1 7Contoh Kode Floating Point
exp frac
f
M
kasus
3/4
0000 000 0 0 0000 001 1/8 1/8 0000 010 2/8 2/8 denormalized … denormalized 0000 110 6/8 6/8 0000 111 7/8 7/8 0001 000 0 8/8Perhitungan nilai M
denormalized : M = f 0001 001 1/8 9/8 … 0110 111 7/8 15/8 0111 000 0 8/8 denormalized : M = f normalized : M = 1 + ff = 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 1110 111 7/8 15/8
Contoh Kode Floating Point
s exp frac
Perhitungan nilai V = (–1)s x M x 2E4/4
0 0000 000 0
0 0000 001 1/8*1/64 = 1/512
0 0000 010 2/8*1/64 = 2/512
bilangan terdekat ke nol
…
0 0000 110 6/8*1/64 = 6/512
0 0000 111 7/8*1/64 = 7/512
0 0001 000 8/8*1/64 = 8/512
bilangan denormalized terbesar Bilangan normalized terkecil
0 0001 001 9/8*1/64 = 9/512 … 0 0110 111 15/8*1/2 = 15/16 0 0111 000 8/8*1 = 1 g terdekat ke 1 (dr bawah) 0 0111 000 8/8 1 1 0 0111 001 9/8*1 = 9/8 … 0 1110 110 14/8*128 = 224
terdekat ke 1 (dari atas)
bilangan normalized terbesar bilangan normalized terbesar
Nilai Single Precision (float)
Single precision : s=1 bit, exp=8 bit , frac=23 bit → total 32 bitD k i i
f
Nil i N
ik
Deskripsi
exp
frac
Nilai Numerik
Zero 00…00 00…00 0.0
k il 23 126
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
≈ 1.2 X 10
Satu 01…11 00…00 1.0
Normalized terbesar 11 10 11 11 (2 0 ) X 2127
Integer ke Floating Point
Konversi integer ke format floating point single precision
12345
10= 0x3039 = 11000000111001
2= 1.1000000111001
2X 2
13 normalisasi bilangan dengan shift 13 posisi ke kanan binary pointKonstruksi 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
t k i b i
(8 bit)
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
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
Dapat terjadi pembulatan agar cocok dengan nilai frac
Metoda pembulatan (rounding)
1 40 1 60 1 50 2 50 –1 50 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 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; zero = pembulatan ke arah nol; round down = pembulatan ke bawah;
Pembulatan Nearest Even
Mode pembulatan standar (
p
(
default
)
)
Pembulatan ke nilai terdekat
Jika bilangan berada tepat ditengah-tengah antara dua
il i
ki
b l tk
hi
il i di it
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)
Pembulatan Bilangan Biner
Bilangan pecahan biner
Be nil i “gen p” jik le t ignifi nt bit 0 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
Floating Point pada C
Bahasa C memiliki dua format floating point :
float
single precision (32 bit)
float
single precision (32 bit)
double
double precision (64 bit)
Casting
antara format int, float, dan double mengubah nilai
numerik dan representasi bit nya :
numerik dan representasi bit-nya :
Dari int ke float
Bilangan tidak akan overflow, tetapi dapat mengalami pembulatan
D i
t
k
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
Ariane 5
Meledak 37 detik setelah
peluncuran
peluncuran
Membawa muatan, satelit
seharga 500 juta dollar
Mengapa terjadi kegagalan ?
Mengapa terjadi kegagalan ?
Perhitungan kecepatan
horisontal dilakukan dalam
bilangan floating point
bilangan floating point
Dikonversi ke integer 16-bit
Bekerja baik pada Ariane 4
Pada Ariane 5 terjadi overflow
Pada Ariane 5 terjadi overflow
Ariane 5 menggunakan
perangkat lunak yang sama dengan Ariane 4, padahal kecepatan geraknya lima kali kecepatan geraknya lima kali