Anda di halaman 1dari 26

Organisasi Sistem Komputer

Bagian 4
Floating Point

Sekolah Teknik Elektro dan Informatika


Institut Teknologi Bandung
2009
1

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

Bilangan Pecahan Biner


2i
2i1

Representasi bilangan :
i


bi bi1

binary point

b2 b1 b0 .b1 b2 b3
1/2
/
1/4
1/8

4
2
1

b=

bj

bk 2

k = j

Bit sebelah
b l h kiri
k binary
b
point
merepresentasikan bobot 2k
Bit sebelah kanan binary
point merepresentasikan
bobot 2-k

2j
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
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

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

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 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


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

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 0000) atau tidak
semua satu (exp 1111)

Nilai denormalized
Bila bit-bit exp semuanya nol (exp = 0000)

Nilai khusus
Bila bit-bit exp semuanya satu (exp = 1111)

Nilai Normalized
Berlaku untuk kondisi

exp 0000 dan exp 1111

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.xxxx
0.xxx x2, dimana x adalah bit
bit-bit
bit pada frac
M berkisar antara 1.0 (frac= 0000) s/d 2.0 (frac = 1111 )
s

exp
p

frac

1 bit

k bit

n bit
10

Nilai Denormalized
Berlaku untuk kondisi exp = 0000
Nilai kode

eksponen E = 1 bias
bias = 2k-1 1, dimana k adalah banyaknya bit exp

signifikan M = f

pecahan f = 0.xxxx2, dimana x adalah bit-bit pada frac

Kasus denormalized

e p = 0000,
exp
000 0 frac = 0000
000 0
Merepresentasikan nilai 0
Terdapat perbedaan antara nilai +0 and 0, berdasarkan nilai bit s

exp = 0000, frac 0000

Bilangan
Bil
yang sangatt dekat
d k td
dengan 0.0
00
Sifat gradual underflow, semakin kecil semakin presisi

exp
p

frac

1 bit

k bit

n bit
11

Nilai Khusus
Berlaku untuk kondisi exp = 1111
Kasus :
exp = 1111, frac = 0000
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 = 1111, frac 0000


Disebut Not-a-Number (NaN)
Merepresentasikan situasi dimana tidak ada nilai numeriknya
Contoh : sqrt(1),

exp
p

frac

1 bit

k bit

n bit
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.

NaN

Tak hingga (infinity)


Not a Number

-Normalized

+Denorm

-Denorm
0

+0

+Normalized

+
NaN

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

10

15

Nilai antara -1.0 hingga +1.0 :

-1
-15

-10

-0,5

-5
D
Denormalized
li d

0
0

0,5

N
Normalized
li d

Infinity
f

10

1
15

Perhatikan : distribusi semakin padat ketika mendekati nol


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

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

15

Contoh Kode Floating Point


2/4
exp

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
-

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
16

Contoh Kode Floating Point


3/4
exp frac

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

6/8
7/8

14/8
15/8

tak hingga
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

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

(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


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

0000 0000

0.0

Denorm pos terkecil


k il

0000 0001

126
2 23 X 2126
1.4 X 1045

Denorm terbesar

0000 1111

(1.0 ) X 2126
1.2 X 1038

Norm pos terkecil

0001 0000

1.0 X 2126
1.2
1 2 X 1038

Satu

0111 0000

1.0

Normalized terbesar

11 10 1111
1110
11 11

(2.0
(2
0 )) X 2127
3.4 X 1038

f
frac

Nil i Numerik
Nilai
N
ik

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

8 bit exp

23 bit frac
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
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

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))
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

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

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
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
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)

26

Anda mungkin juga menyukai