"Wahai jin dan manusia, jika kalian mampu menembus penjuru langit dan bumi, tembuslah! Kalian tidak dapat menembusnya kecuali dengan kekuatan (ilmu)." (Ar-Rahman:33)

Sudah sekian bulan ga ngeblog. rasanya kangen ingin menulis lg. dan akhirnya hari ini kesampaian juga. ^_^ disini saya memberi contoh aplikasi java tentang konversi dari bilangan desimal ke format Floanting-Point IEEE. floating point berisikan 2 bagian utama. yaitu mantisa (fraction) dan eksponen (exponent) serta bit untuk tanda (sign). Standar floating point yang biasa digunakan adalah IEEE 754 presesi tunggal (32-bit) dan presesi ganda (64-bit). tp disini saya memberi contoh yang presesi tunggal.

Hasil Eksekusi:

gambar hasil tampilan

Sourcecode:


import java.util.Scanner;
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // author by : "Ariska Hidayat"
 // NIM : 100 300 92
 // DariDesimalKeIEEE.java, Created on Mar 20, 2012, 12:50:58 PM
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 public class DariDesimalKeIEEE {

private static int eksponen;
 private static String strDepanKoma;
 private static String strBelakangKoma;
 private static String e;
 private static String s;
 private static String f;

public static void main(String[] args) {
 // berdoalah sebelum memulai...
 boolean ulangi;
 do {
 eksponen = 0;
 strDepanKoma = "";
 strBelakangKoma = "";
 e = "";
 s = "";
 f = "";
 String str = inputString(); // input data
 System.out.println("\n Hasil Analisa: ");
 s = sign(str); // untuk memberikan tanda
 str = changeToBiner(str); // mengubah dari desimal ke binner
 str = changeToFloatingPoint(str); // mengubah dari binner ke floatingpoint dan mencari nilai eksponen
 f = fraksiPecahan(str); // mengubah menjadi 23 bit
 //Tambahkan 127 ke exponen untuk mendapat nilai e
 e = String.valueOf(127 + eksponen); // mencari nilai e
 e = toBiner(e); // nilai e diubah menjadi binner 8 bit
 ulangi = hasilAkhir(); // menggabungan antara s, e dan f
 } while (ulangi);
 }

//Ubah desimal ke biner
 private static String changeToBiner(String str) {
 // deklarasi variable
 strDepanKoma = "";
 strBelakangKoma = "";

// memisahkan antara koma (depan dan belakang)
 String[] data = str.split(",");
 int depanKoma = Integer.parseInt(data[0]);
 int belakangKoma = 0;
 if (str.contains(",")) {
 belakangKoma = Integer.parseInt(data[1]);
 }
 // mengubah nilai depankoma menjadi positif
 if (depanKoma < 0) {
 depanKoma = depanKoma * -1;
 }

// melakukan pengubahan depan koma menjadi binner
 do {
 if (depanKoma % 2 == 1) {
 strDepanKoma = strDepanKoma.concat("1");
 depanKoma = (depanKoma - 1) / 2;
 } else {
 strDepanKoma = strDepanKoma.concat("0");
 depanKoma = depanKoma / 2;
 }
 } while (depanKoma > 0);
 strDepanKoma = dibalik(strDepanKoma);

// melakukan perubahan belakang koma menjadi binner
 if (str.contains(",")) {
 double bagi = 0.5;
 for (int n = 0; n < data[1].length(); n++) {
 bagi = bagi * 10;
 }
 do {
 if (belakangKoma >= bagi) {
 strBelakangKoma = strBelakangKoma.concat("1");
 belakangKoma = (int) (belakangKoma - bagi);
 } else {
 strBelakangKoma = strBelakangKoma.concat("0");
 }
 bagi = bagi / 2;
 } while (belakangKoma > 0);
 str = strDepanKoma.concat("," + strBelakangKoma);
 } else {
 str = strDepanKoma;
 }
 return str;
 }

// digunakan untuk membalik suatu string
 private static String dibalik(String str) {
 String[] data = str.split("");
 str = "";
 for (int n = data.length - 1; n > 0; n--) {
 str = str.concat(data[n]);
 }
 return str;
 }

//Tulis biner ke dalam bentuk floating-point dengan basis 2
 private static String changeToFloatingPoint(String str) {
 eksponen = str.indexOf(",") - 1;
 str = "";
 str = strDepanKoma.concat(strBelakangKoma);
 str = str.substring(1);
 return str;
 }

//Tentukan bit s
 private static String sign(String str) {
 String[] bagian = str.split(",");
 double tanda = Double.parseDouble(bagian[0]);
 if (tanda < 0) {
 s = "1";
 } else {
 s = "0";
 }
 System.out.println(" s = " + s);
 return s;
 }

//Tulis f, yakni dari fraksi pecahan dan tambahkan nol hingga memenuhi 23-bit
 private static String fraksiPecahan(String str) {
 int c = 23 - str.length();
 for (int n = 0; n <= c; n++) {
 str = str.concat("0");
 }
 System.out.println(" f = " + str);
 return str;
 }

//Ubah e ke 8-bit
 private static String toBiner(String e) {
 int desimal = Integer.parseInt(e);
 e = "";
 do {
 if (desimal % 2 == 1) {
 e = e.concat("1");
 desimal = (desimal - 1) / 2;
 } else {
 e = e.concat("0");
 desimal = desimal / 2;
 }
 } while (desimal > 0);
 e = dibalik(e);
 System.out.println(" e = " + e);
 return e;
 }

//Tulis ke bentuk format IEEE
 private static boolean hasilAkhir() {
 boolean ulangi = false;
 String str = s.concat(e + f);
 String[] data = str.split("");
 str = "";
 for (int n = 0; n < 33; n++) {
 str = str.concat(data[n]);
 if (n % 4 == 0) {
 str = str.concat(" ");
 }
 }
 System.out.println();
 System.out.println(" Kesimpulannya adalah : \n " + str);
 System.out.println();
 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
 ulangi = tanyakan("Apalah anda ingin mengulanginya lg?[y/t]: ");

return ulangi;
 }

// input data
 private static String inputString() {
 // deklarasi variable
 String str = "";
 Scanner scan = new Scanner(System.in);
 boolean humanError = false;
 // tampilkan
 System.out.println();
 System.out.println();
 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
 System.out.println(" Konvert dari Desimal ke IEEE ");
 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
 System.out.println();
 do {
 humanError = false;
 System.out.print(" Masukkan Angka Desimal: ");
 str = scan.next();
 // melakukan penyeleksian
 if (str.contains(".")) {
 System.out.println();
 System.out.println(" maaf, tidak menggunakan titik tapi koma.\n (contoh 138,16) !!");
 System.out.println();
 humanError = true;
 }
 } while (humanError);
 return str;
 }

private static boolean tanyakan(String string) {
 boolean ulangi = false;
 Scanner scan = new Scanner(System.in);
 char jawab;
 boolean humanError;
 do {
 humanError = false;
 System.out.print(string);
 jawab = scan.next().toUpperCase().charAt(0);
 if (jawab == 'Y') {
 ulangi = true;
 } else if (jawab == 'T') {
 ulangi = false;
 } else {
 humanError = true;
 }
 } while (humanError);
 return ulangi;
 }
 }

maaf, jika sourcecodenya kurang rapi dan maaf, jika ada bug yang blm saya ketahui. jika menemukan bisa isi komen dibawah ini.

Jika anda ingin mengembangkan sourcecode lebih lanjut..

anda bisa donwload <disini>

Advertisements

Comments on: "Contoh Java: Konversi dari Bilangan Desimal ke dalam format Floanting-Point IEEE" (4)

  1. Keren keren…

    Tak izin download ya yat..

  2. Rapi sekali. Terima kasih, Mas. Saya lagi butuh kode Java yang ini…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: