Jumat, 22 April 2016

FLOATING POINT (BILANGAN REAL)

FLOATING POINT (BILANGAN REAL)

 

Floating-point atau bilangan titik mengambang, adalah sebuah format bilangan yang dapat digunakan untuk merepresentasikan sebuah nilai yang sangat besar atau sangat kecil. Bilangan ini direpresentasikan menjadi dua bagian, yakni bagian mantisa dan bagian eksponen (E). Bagian mantisa menentukan digit dalam angka tersebut, sementara eksponen menentukan nilai berapa besar pangkat pada bagian mantisa tersebut (pada posisi titik desimal). Sebagai contoh, bilangan 314600000 dan bilangan 0.0000451 dapat direpresentasikan dalam bentuk bilangan floating point: 3146E5 dan 451E-7 (artinya 3146 * 10 pangkat 5, dan 451 * 10 pangkat -7).

Kebanyakan CPU atau MIKROPROSESOR sederhana tidak mendukung secara langsung operasi terhadap bilangan floating-point ini, karena aslinya mikroprosesor ini hanya memiliki unit aritmatika dan logika serta unit kontrol yang beroperasi berdasarkan pada bilangan bulat (integer) saja.
Perhitungan atau kalkulasi terhadap nilai floating point pada jenis mikroprosesor sederhana dapat dilakukan dengan menggunakan perangkat lunak, sehingga operasinya sangat lambat. Untuk itulah, sebuah prosesor tambahan dibutuhkan untuk melakukan operasi terhadap jenis bilangan ini, yang disebut dengan unit titik mengambang.

Dalam bahasa pemrograman, khususnya keluarga bahasa pemrograman C, bilangan titik mengambang direpresentasikan dengan tipe data float.

Berikut contoh penulisan bilangan float dalam PHP:

<?php
   $angka_float1= 0.78;
   $angka_float2= 14.99;
   $angka_scientific1=0.314E1;
   $angka_scientific2=0.3365E-3;

   echo $angka_float1; // 0.78
   echo "<br />";
   echo $angka_float2; //14.99
   echo "<br />";
   echo $angka_scientific1; //3.14
   echo "<br />";
   echo $angka_scientific2; //0.0003365
?>
 
Floating point adalah sebuah bilangan yang digunakan untuk menggambarkan sebuah nilai yang sangat besar atau sangat kecil. Bilangan tersebut dapat diwujudkan dalam notasi ilmiah, yaitu berupa angka pecahan desimal  dikalikan dengan angka 10 pangkat bilagnan tertentu. Bilangan seperti ini dapat direpresentasikan menjadi dua bagian, yaitu bagianmantisa dan bagian eksponen (E). Bagian mantisa menentukan digit dalam angka tersebut, sedangkan eksponen menentukan nilai berapa besar pangkat pada bagian mantisa tersebut (jarak dari titik posisi desimal). Contoh :
Misalkan terdapat sebuah bilangan 8934000000 maka bilangan ini dapat dituliskan dalam bentuk bilangan floating point. 8934E6 yang secara matematis artinya : 8934 x 10⁶
Bagian mantisanya adalah 8934 dan bagian eksponennya adalah E6

Cara penulisan angka seperti ini merupakan cara singkat untuk menuliskan angka yang nilainya sangat besar maupun sangat kecil atau disebut floating point number. Bilangan seperti ini banyak digunakan dalam pemrosesan grafik dan kerja ilmiah. Proses aritmatika bilangan floating point memang lebih rumit dan prosesor membutuhkan waktu yang lebih lama untuk mengerjakannya, karena mungkin akan menggunakan beberapa siklus detak (clock cycle) prosesor.
Oleh karena itu beberapa jenis komputer menggunakan prosesor sendiri untuk menangani bilangan floating point. Prosesor yang khusus menangani bilangan floating point disebutFloating Pont Unit (FPU) atau disebut juga dengan nama math co-processor.

otasi floating-point dapat digunakan untuk merepresentasikan baik bilangan yang sangat besar (|N| » 0), bilangan yang sangat kecil atau dekat dengan nol (|N| « 1), maupun bilangan yang terdiri dari keduanya. Floating-point membuat proses operasi aritmatika menjadi relatif lebih mudah. Floating-point merepresentasi bilangan nyata dalam bentuk persamaan:
N = m × Re
Dimana:
m merupakan bagian bilangan pecahan yang biasa disebut significand atau mantissa
e adalah bagian bilangan bulat yang biasa disebut exponent
R merupakan basis dari suatu sistem bilangan
Bagian bilangan pecahan m merupakan p-digit bilangan dengan bentuk (±d.dddd … dd), dimana semua digit d adalah bilangan bulat antara 0 dan R-1. Jika digit terdepan (sebelak kiri) dari m bukan angka nol, maka bilangan ini dapat dikatakan sebagai normalized.
Sebagai contoh, bilangan desimal 0,0003754 dan 1234 dapat direpresentasi dalam notasi floating point sebagai 3,754 × 10−4 dan 1,234 × 103. Bilangan heksadesimal 257,ABF dapat direpresentasi sebagai 2,57ABF × 162. Dalam kasus bilangan biner normalized, angka terdepan (MSB) selalu ‘1’ dan dengan demikian tidak perlu disimpan secara eksplisit. Bilangan biner campuran 1100,10112 dapar direpresentasi dalam notasi floating point sebagai 0,1101011 × 23 = 0,1101011e+0011. Disini, 0,1101011 adalah mantissa dan e+0011 menunjukan bahwa eksponennya adalah +3. Contoh lainnya, 0,0001112 dapat ditulis sebagai 0,111e-0011, dengan 0,111 adalah mantissa dan e-0011 menunjukkan eksponen dari -3. Jika kita ingin merepresentasikan mantissa menggunakan delapan bit, maka angka 0,1101011 dan 0,111 dapat ditulis seperti 0,11010110 dan 0,11100000.
Rentang Angka dan Presisi
Rentang angka dapat direpresentasikan dalam mesin apapun tergantung dari jumlah bit dalam eksponen, sedangkan akurasi pecahan atau presisi pada akhirnya ditentukan oleh jumlah bit dalam mantissa. Semakin tinggi jumlah bit dalam eksponen, maka semakin besar rentang angka yang dapat direpresentasikan. Misalnya, rentang angka yang mungkin pada format bilangan biner floating-point yang menggunakan 6-bits untuk merepresentasi besarnya eksponen adalah 2-64 sampai 2+64, dimana nilai ini setara dengan rentang 10-19 sampai 10+19.
Presisi ditentukan oleh jumlah bit yang digunakan untuk merepresentasi mantissa. Hal ini biasanya direpresentasikan sebagai angka desimal presisi. Konsep presisi sebagaimana didefinisikan terhadap notasi floating-point dapat dijelaskan secara sederhana sebagai berikut. Jika mantissa disimpan dalam jumlah n bit, maka itu dapat merepresentasi sebuah bilangan desimal antara 0 dan 2n-1 seperti mantissa yang disimpan sebagai bilangan bulat tak-bertanda (unsigned). Jika M adalah bilangan terbesar seperti 10M-1 kurang dari atau sama dengan 2n-1, maka M adalah presisi yang dinyatakan sebagai angka desimal presisi. Misalnya, jika mantissa dinyatakan dalam 20 bit, maka angka desima presisi dapat ditemukan sekitar 6, seperti 220-1 sama dengan 1 048 575 dimana sedikit lebih kecil dari 106-1.
Format Bilangan Floating-Point
Format bilangan floating-point biner telah distandarkan oleh IEEE 754-2008 (atau ISO/IEC/IEEE 60559:2011), yaitu meliputi format 16-bit (half), 32-bit (single-precision), 64-bit (double-precision), 80-bit (double-extended) dan 128-bit (quad-precision). Pada artikel ini hanya akan dibahas tentang format dasar, yaitu 32-bit dan 64-bit.
1. Bilangan Floating-Point 32-bit (single-precision)


Bilangan floating-point 32-bit tersusun atas:
• 1 bit tanda (S)
• 8 bit eksponen (E)
• 23 bit mantisa (M)
Bit tanda (S) menyatakan bilangan positif jika S = 0 dan negatif jika S = 1. Field eksponen adalah basis 2. Nilai eksponen bisa negatif atau positif untuk menyatakan bilangan yang sangat kecil atau sangat besar. Format eksponen yang digunakan adalah excess-127. Nilai 127 ditambahkan dari nilai eksponen sebenarnya (Exp), yaitu Exp = E − 127. Dengan excess-127, nilai E akan selalu positif dengan jangkauan 0 sampai 255.
Nilai ekstrem adalah untuk E = 0 dan E = 255:
E = 0 menyatakan bilangan NOL (jika M = 0) dan subnormal (jika M ≠ 0)
E = 255 menyatakan bilangan TAK TERHINGGA (jika M = 0) dan NAN/not-a-number (jika M ≠ 0)
Nilai normal adalah 1 ≤ E ≤ 254 yang menunjukkan nilai eksponen sebenarnya dari -126 sampai 127. Contoh: Emin(1) = −126, E(50) = −77, dan Emax(254) = 127.
Tabel nilai eksponen di format floating-point 32-bit
Eksponen (E)
Mantissa = 0
Mantissa ≠ 0
Persamaan
0
0, -0
Subnormal
  (−1)S × 0.bit signifikan × 2−126
1-254

Nilai ternormalisasi
(−1)S × 0.bit signifikan × 2E−127
255
Bukan bilangan
(NAN=not-a-number)

Saat nilai mantissa (M) dinormalisasi, most significant bit (MSB) selalu 1. Namun, bit MSB ini tidak perlu disertakan secara eksplisit di field mantisa (Tabel diatas). Nilai mantissa yang sebenarnya adalah 1.M, sehingga nilai bilangan floating-pointnya menjadi:

Di bilangan subnormal, nilai mantissa sebenarnya adalah 0.M, sehingga bilangan floating-pointnya menjadi:

Dengan mantissa 23 bit ini ditambah 1 bit implisit, total presisi dari representasi floating-point 32-bit ini adalah 24 bit atau sekitar 7 digit desimal (yaitu 24 × log10(2) = 7,225). Dalam bahasa pemrograman, suatu bilangan single-precision ini dideklarasikan dengan tipe data float (C, C++, Java) atau single (Pascal, VB, MATLAB).
2. Bilangan Floating-Point 64-bit (double-precision)


Bilangan floating-point 64-bit tersusun atas:
• 1 bit tanda (S)
• 11 bit eksponen (E)
• 52 bit mantisa (M)
Seperti halnya dengan bilangan single-precission, bit tanda (S) menyatakan bilangan positif jika S = 0 dan negatif jika S = 1. Field eksponen adalah basis 2. Nilai eksponen bisa negatif atau positif untuk menyatakan bilangan yang sangat kecil atau sangat besar. Format eksponen yang digunakan adalah excess-1023. Nilai 1023 ditambahkan dari nilai eksponen sebenarnya (Exp), yaitu Exp = E − 1023. Dengan excess-1023, nilai E akan selalu positif dengan jangkauan 0 sampai 2047.
Nilai ekstrem adalah untuk E = 0 dan E = 2047:
E = 0 menyatakan bilangan NOL (jika M = 0) dan subnormal (jika M ≠ 0)
E = 255 menyatakan bilangan TAK TERHINGGA (jika M = 0) dan NAN/not-a-number (jika M ≠ 0)
Nilai normal adalah 1 ≤ E ≤ 2047 yang menunjukkan nilai eksponen sebenarnya dari -1022 sampai 1023. Contoh: Emin(1) = −1022, E(100) = −923, dan Emax(254) = 1023.
Tabel nilai eksponen di format floating-point 64-bit
Eksponen (E)
Mantissa = 0
Mantissa ≠ 0
Persamaan
0
0, -0
Subnormal
  (−1)S × 0.bit signifikan × 2−1022
1-2046

Nilai ternormalisasi
(−1)S × 0.bit signifikan × 2E−1023
2047
Bukan bilangan
(NAN=not-a-number)

Nilai mantisa (M) dinormalisasi, yang berarti most significant bit (MSB) selalu 1. Bit MSB ini tidak perlu disertakan secara eksplisit di field mantisa. Nilai mantisa sebenarnya adalah 1.M, sehingga nilai bilangan floating-pointnya menjadi:

Dengan mantissa 52 bit ini ditambah 1 bit implisit, total presisi dari representasi floating-point 32-bit ini adalah 53 bit atau sekitar 16 digit desimal (yaitu 53 × log10(2) = 15.955). Dalam pemrograman, suatu bilangan double-precision ini dideklarasikan dengan tipe data double (C, C++, Java).

Metode Komplemen Bilangan
Komplemen digunakan dalam komputer digital untuk merepresentasikan dan manipulasi bilangan negatif atau untuk menyederhanakan operasi pengurangan dan manipulasi logika. Ada dua jenis komplemen untuk setiap sistem bilangan dengan basis R, yaitu komplemen R dan komplemen R-1. Jika nilai basis tersebut disubsitusikan, maka dua jenis komplemen untuk sistem bilangan desimal, biner oktal, dan heksadeimal adalah sebagai berikut:
  • Bilangan desimal (basis-10) : Komplemen 10 dan komplemen 9
  • Bilangan biner (basis-2) : Komplemen 2 dan komplemen 1
  • Bilangan oktal (basis-8) : Komplemen 8 dan komplemen 7
  • Bilangan heksadesimal (basis-16) : komplemen 16 dan komplemen 15
Komplemen suatu bilangan N dalam suatu sistem bilangan yang berbasis R dapat didefinisikan sebagai berikut:
Komplemen R dari N :
    Nc,R = Rn – N ,   N ≠ 0


= 0 ,   N = 0
  Komplemen R-1 dari N :
  Nc,R-1 = Rn – R-m – N
Dimana:
n = banyaknya bilangan bulat
m = banyaknya bilangan pecahan
Contoh:
Tentukan komplemen R dan R-1 dari bilangan-bilangan dibawah ini:
a. 34510 c. 101102 e. 2578 g. 32016
b. 327,1510 d. 1101,012 f. 257,1028 h. A53,216
Solusi: (cara pertama)
a. Komplemen 10: 345c,10 = 103 – 345 = 1000 – 345 = 655

Komplemen 9: 345c,9 = 103 – 100 – 345 = 1000 – 1 – 345 = 654

b. Komplemen 10: 327,15c,10 = 103 – 327,15 = 1000 – 327,15 = 672,85

Komplemen 9: 327,15c,9 = 103 – 10-2 – 327,15 = 1000 – 0,01 – 327,15 = 672,84

c. Komplemen 2: 10110c,2 = 25 – 101102 = 1000002 – 101102 = 010102

Komplemen 1: 10110c,1 = 25 – 20 – 101102 = 1000002 – 12 – 101102 = 010012

d. Komplemen 2: 1101,01c,2 = 24 – 1101,012 = 100002 – 1101,012 = 0010,112

Komplemen 1: 1101,01c,1 = 24 – 2-2 – 1101,012 = 100002 – 0,012 – 1101,012 = 0010,102

e. Komplemen 8: 257c,8 = 83 – 2578 = 10008 – 2578 = 5218

Komplemen 7: 257c,7 = 83 – 80 – 2578 = 10008 – 18 – 2578 = 5208

f. Komplemen 8: 257,102c,8 = 83 – 257,1028 = 10008 – 257,1028 = 520,6768

Komplemen 7: 257,102c,7 = 83 – 8-3 – 257,1028 = 10008 – 0,0018 – 257,1028 = 520,6758

g. Komplemen 16: 320c,16 = 163 – 32016 = 100016 – 32016 = CE016

Komplemen 15: 320c,15 = 163 – 160 – 32016 = 100016 – 116 – 32016 = CDF16

h. Komplemen 16: A53,2c,16 = 163 – A53,216 = 100016 – A53,216 = 5AC,E16

Komplemen 15: A53,2c,15 = 163 – 16-1 – A53,216 = 100016 – 0,116 – A53,216 = 5AC,D16

Dari definisi dan contoh-contoh di atas, dapat dilihat bahwa komplemen R-1 dari suatu bilangan dapat diperoleh dengan mengurangi angka terbesar dari anggota sistem bilangan (9 untuk desimal, 1 untuk biner, 7 untuk oktal, dan F untuk heksadesimal) dengan setiap angka dalam bilangan yang bersangkutan, sedangkan komplemen R dapat diperoleh dengan menambahkan angka paling kanan pada bilangan komplemen R-1 dengan angka 1.
Solusi: (cara kedua)
a. Komplemen 9: 345c,9 = (9–3=6; 9–4=5; 9–5=4) = 654

Komplemen 10: 345c,10 = (9–3=6; 9–4=5; 9–5=4) + 100 = 65 + 1 = 655

b. Komplemen 9: 327,15c,9 = (9–3=6; 9–2=7; 9–7=2; 9-1=8; 9-5=4) = 672,84

Komplemen 10: 327,15c,10 = (9–3=6; 9–2=7; 9–7=2; 9-1=8; 9-5=4) + 10-2


= 672,84 + 0,01 = 672,85

c. Komplemen 1: 10110c,1 = (1–1=0; 1–0=1; 1–1=0; 1-1=0; 1-0=1) = 010012

Komplemen 2: 10110c,2 = (1–1=0; 1–0=1; 1–1=0; 1-1=0; 1-0=1) + 20 = 010012 + 12 = 010102

d. Komplemen 1: 1101,01c,1 = (1–1=0; 1–1=0; 1–0=1; 1-1=0; 1-0=1; 1-1=0) = 0010,102

Komplemen 2: 1101,01c,2 = (1–1=0; 1–1=0; 1–0=1; 1-1=0; 1-0=1; 1-1=0) + 2-2


= 0010,102 + 0,012 = 0010,112

e. Komplemen 7: 257c,7 = (7–2=5; 7–5=2; 7–7=0) = 5208

Komplemen 8: 257c,8 = (7–2=5; 7–5=2; 7–7=0) + 80 = 5208 + 18 = 5218

f. Komplemen 7: 257,102c,7 = (7–2=5; 7–5=2; 7–7=0; 7–1=6; 7–0=7; 7–2=5) = 520,6758

Komplemen 8: 257,102c,8 = (7–2=5; 7–5=2; 7–7=0; 7–1=6; 7–0=7; 7–2=5) + 8-3


= 520,6758 + 0,0018 = 520,6768

g. Komplemen 15: 320c,15 = (F–3=C; F–2=D; F–0=F) = CDF16

Komplemen 16: 320c,16 = (F–3=C; F–2=D; F–0=F) + 160 = CDF16 + 116 = CE016

h. Komplemen 15: A53,2c,15 = (F–A=5; F–5=A; F–3=C; F–2=D) = 5AC,D16

Komplemen 16: A53,2c,16 = (F–A=5; F–5=A; F–3=C; F–2=D) + 16-1


= 5AC,D16 + 0,016 = 5AC,E16

Sebenarnya, komplemen bilangan biner dapat diperoleh dengan sangat mudah. Komplemen 1 diperoleh dengan menggantikan setiap angka 0 menjadi 1 dan angka 1 menjadi 0. Komplemen 2 dapat diperoleh dengan menambahkan 1 pada bilangan komplemen 1 atau kalau kita melakukan proses komplemen dari kanan ke kiri, biarkanlah semua angka 0 dan 1 yang terletak paling kanan dan semua angka setelah bit 1 paling kanan diubah dari 0 menjadi 1 dan dari 1 menjadi 0.
Contoh:
a. Komplemen 1: 10100100c,1 = 010110112

Komplemen 2: 10100100c,2 = 010111002

b. Komplemen 1: 10100,101c,1 = 01011,0102

Komplemen 2: 10100,101c,2 = 01011,0112
Perhatikan pada bagian komplemen 2, yang diberi warna biru adalah angka yang diubah kebentuk komplemenya sedangkan sisanya dibiarkan saja (tidak diubah).
Sumber: http://bespus-community.blogspot.com/2012/11/Bilangan-Floating-Point-dan-Metode-Komplemen-Bilangan.html#ixzz2iKuhET4X

Tidak ada komentar:

Posting Komentar