Sunday, November 17, 2013

IBM versus IEEE

Format penyimpanan data (amplitudo) seismik umumnya disimpan dalam format IBM 32-bit Single Precision dan kadang-kadang disimpan dalam formai IEEE Std 754-1985. Kurangnya pemahaman Geoscientist terhadap kedua format tersebut  dapat berakibat bedanya hasil interpretasi ataupun kalkulasi baik pada data non-preserve maupun preserve amplitude.

Gambar di bawah ini  menunjukkan perbedaan penampilan, baik amplitudo ataupun hilangnya/munculnya karakter baru pada data seismik dengan format IEEE (kiri) yang disimpan secara salah pada format IBM (tengah) dan setelah gain (kanan).


Courtesy Dennis Meisinger, "SEGY Floating Point Confusion", CSEG RECORDER September 2004.

Penjelasan di bawah ini adalah perbandingan cara menyimpan data binary 32-bit dengan IBM Single Precision dan IEEE.
Contoh: sampel data seismik binary 32-bit memiliki nilai:
11000010101100011001111110101111 (32 Angka)

IBM-Single Precision
Rumus konversi Binary ke IBM adalah:
(-1)^sign*(16^(exp-64))*fraction

1. Pisahkan 1 angka kelompok pertama, 7 angka kelompok kedua dan 24 angka kelompok ketiga.
1-1000010-101100011001111110101111
2. Angka pertama merupakan sign, dalam hal ini 1.
3. Ubah 7 angka kelompok kedua 1000010  menjadi desimal dengan kode C dibawah artikel ini. Dimana hasilnya adalah 66, angka ini merupakan exp.
4. Hitung fraction dari 24 angka kelompok ketiga

1*(2^-1)+0*(2^-2)+1*(2^-3)+1*(2^-4)+0*(2^-5)+0*(2^-6)+0*(2^-7)+1*(2^-8)+1*(2^-9)+0*(2^-10)+0*(2^-11)+1*(2^-12)+1*(2^-13)+1*(2^-14)+1*(2^-15)+1*(2^-16)+1*(2^-17)+0*(2^-18)+1*(2^-19)+0*(2^-20)+1*(2^-21)+1*(2^-22)+1*(2^-23)+1*(2^-24)
Dimana hasilnya adalah  0.69384282827377319335

5. Gunakan rumus di atas:
(-1)^1*(16^(66-64))*0.69384282827377319335=-177.63


IEEE Std 754-1985
Rumus konversi Binary ke IEEE adalah:
(-1)^sign*(1+fraction)*2^(exp-127)

1. Pisahkan 1 angka kelompok pertama, 8 angka kelompok kedua dan 23 angka kelompok ketiga.
1-10000101-01100011001111110101111
2. Angka pertama merupakan sign, dalam hal ini 1.
3. Ubah 8 angka kelompok kedua 10000101  menjadi desimal dengan kode C dibawah artikel ini. Dimana hasilnya adalah 133, angka ini merupakan exp.
4. Hitung fraction dari 23 angka kelompok ketiga

0*(2^-1)+1*(2^-2)+1*(2^-3)+0*(2^-4)+0*(2^-5)+0*(2^-6)+1*(2^-7)+1*(2^-8)+0*(2^-9)+0*(2^-10)+1*(2^-11)+1*(2^-12)+1*(2^-13)+1*(2^-14)+1*(2^-15)+1*(2^-16)+0*(2^-17)+1*(2^-18)+0*(2^-19)+1*(2^-20)+1*(2^-21)+1*(2^-22)+1*(2^-23)
Dimana hasilnya adalah 0.38768565654754638671
5. Gunakan rumus di atas:
 (-1)^1*(1+0.38768565654754638671)*2^(133-127)=-88.81


Code C untuk mengubah binary ke desimal:
#include <stdio.h>
void main()
{
int num, bnum, dec = 0, base = 1, rem ;
printf("Enter a binary number(1s and 0s)\n");
scanf("%d", &num);
bnum = num;
while( num > 0)
{
rem = num % 10;
dec = dec + rem * base;
num = num / 10 ;
base = base * 2;
}
printf("The Binary number is = %d\n", bnum);
printf("Its decimal equivalent is =%d\n", dec);
}


No comments: