Pages

Friday, September 7, 2012

Representasi "Float Point" VB6



Representasi bilangan yang berkoma/desimal atau biasa disebut float atau "Single" pada VB. pada Memory Komputer.
sekian lama udah gak nulis artikel baru lagi di blog ini. akhirnya baru bisa juga, untuk berbagi ilmu disini.. 
representasi tipe data float/Single yang digunakan compiler/ide pada "Visual Basic".
kebanyakan prosesor tidak mensuport secara langsung untuk operasi bilangan floating-point (bilangan berkoma), karena hanya memiliki unit aritmetika dan logika, dan unit kontrol yang beroperasi berdasarkan pada integer saja.
biasanya ini juga bagian terpenting yang perlu diketahui jika anda ingin belajar assembly atau developer language programming. tapi silahakan dibaca untuk sekedar pengetahuan para programmer2.

nah pada gambar, adalah representasi tipe data Single pada VB yang diisi dengan nilai 5.53 pada memory komputer.
lihatlah pada kotak warna merah pada memory(sebelah kanan) format yang ditunjukan adalah "Byte Array" coba kalian baca nilainya per element Byte Arraynya dari kanan yang sudah saya kotakan.. yaitu representasi nilainya menjadi 40B0F5C3h (ingat bilangan heksa) dengan ukuran 32bit/4byte, nah lho gimana nyambungnya coba dari 5.53 kok bisa jadi 40B0F5C3h pada memory... nah ini dia yang kita pelajari adalah bagaimana prosesor mengerti berapa nilai float point asli dan representasi "Single precision binary floating-point 32bit" (tipe data nya adalah Single pada VB)

dalam floating point dengan format 32 bit, sebuah angka yang dikonversi kedalam bentuk biner, misal 40B0F5C3 memiliki angka biner yaitu: "1000000101100001111010111000011" (bisa pake kalkulator windows) karena jumlah digit binernya hanya memiliki 31 digit dan kita memakai format ukuran 32bit maka akan ditambahkan 1 digit angka lagi dipaling depan dengan nilai 0 agar sesuai dengan format 32bit yaitu menjadi "01000000101100001111010111000011" 
intinya adalah, tidak boleh ada awalan 0 dalam notasi yang akan dioperasi
format 32bit kemudian terbagi menjadi 3 bagian yaitu:
1. Sign -> dengan ukuran 1bit
2. Eksponen -> dengan ukuran 8bit
3. Mantissa -> dengan ukuran 23bit

kemudian kita pisah2 kan dahulu ketiga bagian tersebut:
0 10000001 01100001111010111000011
ketiga bagian tersebut akan kita olah menjadi bilangan desimal..

#pertama untuk menentukan nilai itu positif atau negatif kita menggunakan bagian sign bit yaitu "jika nilai sign 0 maka bilangannya adalah positif, jika nilai sign 1 maka bilangannya adalah negatif".

#kedua pada bagian exponen memiliki nilai: 81h (heksa). untuk mendapatkan nilai exponen asli kita bisa kurangkan nilai 81h dengan 7Fh dan nilai exponen asli yang kita gunakan adalah 2

#ketiga pada bagian Mantissa -> pertama kita tambahkan 1 pada awalan Mantissa yaitu menjadi 1.01100001111010111000011 nah karena eksponen aslinya adalah 2 kita geser koma nya 2 bit kekanan yaitu menjadi 101.100001111010111000011

nah kalau sudah begini notasi biner nya dibagi menjadi 2 bagian yaitu: notasi pada sebelah kirinya koma adalah nilai integer yaitu 5 dan di sebelah kanan adalah nilai yang akan kita operasikan yaitu rumusnya:
(n1*2^-1) +( n2*2^-2) + (n3*2^-3).... dan seterusnya kalo kalian itungin pake manual sih kelamaan langsung pake kode VB saja!


Function CalcMantissa(biner As String) As String
Dim rtrn As Single
Dim p As Integer
Dim n As String
p = -1
For i = 1 To Len(biner)
n = Mid(biner, i, 1)
rtrn = rtrn + (n * 2 ^ p)
p = p - 1
Next
CalcMantissa = rtrn
End Function


parameternya yaitu notasi Mantissa yang sudah digeser koma nya yaitu "100001111010111000011"
pemanggilan fungsinya : MsgBox CalcMantissa("100001111010111000011")
dan nilai yang keluar adalah 0,53
kemudian digabungkan dengan nilai integer menjadi 5.53 karena sign bit 0 maka bilangan tersebut positif

No comments:

Post a Comment