Jump to content

Cara Kerja Floating Point

From Haidhi Wiki
Revision as of 06:55, 9 March 2025 by SanzSkuy (talk | contribs) (Created page with "<span id="ieee-754"></span> == IEEE 754 == Intinya IEEE 754 adalah standar international untuk merepresentasikan floating-point (bilangan pecahan) dalam bentuk biner. Secara umum punya dua jenis yaitu: single precision (32-bit) dan double precision (64-bit). Semakin besar jumlah bit maka suatu bilangan floating-point mampu merepresentasikan suatu bilangan dengan lebih akurat, presisi, serta bisa mengurangi rounding errors; Tetapi juga memerlukan memori yang lebih besar....")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

IEEE 754

Intinya IEEE 754 adalah standar international untuk merepresentasikan floating-point (bilangan pecahan) dalam bentuk biner. Secara umum punya dua jenis yaitu: single precision (32-bit) dan double precision (64-bit). Semakin besar jumlah bit maka suatu bilangan floating-point mampu merepresentasikan suatu bilangan dengan lebih akurat, presisi, serta bisa mengurangi rounding errors; Tetapi juga memerlukan memori yang lebih besar.

Convert Biner ke floating point (32-bit)

Misal kita punya bilangan biner 00111111010000000000000000000000. Angka biner tersebut dibagi menjadi tiga bagian yaitu sign, exponent, dan mantissa

1. Sign: Menentukan apakah bilangan itu positif atau negatif. Kalau nilainya 1 berati bilangan negatif, kalau 0 berati positif.
2. Exponent: untuk menghitung exponent kita konversi ke decimal lalu dikurangi bias yaitu 127 untuk FP32

01111110=126
126−127(bias)=−1

3.Mantissa: Untuk kalkulasi mantissa kita perlu memerhatikan posisi angka 1

M=1+∑i=1nbi⋅2−1

jadi untuk mantissa di atas:

1+(1*2−1)=1.5

Jadi untuk hasil akhir:

2exp*mantissa
=2−1*1.5
=0.5*1.5
=0.75

karena sign tadi adalah 0 yang artinya bilangan positif, maka nilai floating point 32-bit dari 00111111010010000000100000000000 adalah 0.75

Contoh lain: 64-bit

contoh kita mau konversi 1100000000001001000111101011100001010001111010111000010100011111

1. Sign: karena 1 maka sudah dipastikan negatif 2. Exponent: Bias untuk 64-bit adalah 1023

10000000000=1024
1024−1023(bias)=1

2.Mantissa: Biar cepet pake koding dikit, hasilnya 1.57

tes = "1001000111101011100001010001111010111000010100011111"  
  
m = 0  
for i, num in enumerate(tes, start=1):  
  if num == "1":  
    m += 2**-i  
  
mantissa = 1 + m   
print(mantissa) # 1.57

Hasil akhir

2exp*mantissa
=21*1.57
=2*1.57
=3.14

Karena sign nya adalah 1 (negatif), maka hasil akhir adalah -3.14