Noktah Mengambang

From OnnoWiki
Revision as of 09:27, 1 August 2008 by Aa (talk | contribs) (New page: Pengantar Struktur Data dan Operasi Floating Point by: aa, aa.delphi@yahoo.com <a href="http://www.softindo.net">PT SoftIndo</a>, JAKARTA. <hr size=1><i>Status: DRAFT2</hr></i> <br>last u...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Pengantar Struktur Data dan Operasi Floating Point

by: aa, aa.delphi@yahoo.com <a href="http://www.softindo.net">PT SoftIndo</a>, JAKARTA.


Status: DRAFT2


last update: 2006-11-00.

  • <a href=#format>Format dan Tipe Data</a>
  • <a href=#pengolahan>Pengolahan Data Numerik</a>
  • <a href=#rujukan>Rujukan</a>

abstraksi

Sekitar satu dekade yang lalu (sekitar '90-an), Math-Coprocessor masih merupakan suatu kemewahan bagi pengguna PC, hanya professional (umumnya di bidang grafis dan high-end desktop publishing) yang butuh dan terutama: mampu memperolehnya. Buku-buku dan referensi pemrograman biasanya melewatkan bagian Floating Point ini karena selain karena kerumitannya, lambat (lihat tabel 1), juga dianggap tidak praktikal (jarang ada yang punya).


Prosesor Penjumlahan Perkalian Pembagian
Integer Float Integer Float Integer Float
i386/387 2 23-34 9-38 27-35 43 89
i486 1 10 12-42 11 43 62 (35)
Pentium 1 3 10 3 46 33 (19)
PowerPC 6041 3 4 3 20 31 (18)
MIPS R4x00 1 4 10 8 (7) 69 36 (23)

Tabel 1. Timing (dalam kurung = single precision/presisi tunggal)


Disini akan dibahas lengkap tentang format data Floating Point IEEE 754 serta implementasinya dalam prosesor Intel keluarga x87. Dengan tulisan ini diharapkan pembaca bisa mendapatkan gambaran yang jelas mengenai format data Floating Point. Memahami format data floating point adalah suatu hal yang mendasar dan krusial dalam pemrograman numerik, tulisan ini diharap bisa memecahkan entry-barrier bagi pembaca/programer untuk memasuki area pemrograman/operasi numerik yang sering dianggap rumit atau tidak menyenangkan.


catatan:

  • Saat ini (tahun 2000-an), standar minimal 'jatah' desktop (setidaknya di kota-kota besar) adalah Pentium --yang sebagian besar MMX, paling tidak kelas 486-lah, itupun sudah mulai terpinggirkan, i386 hanya dipakai untuk server printer 'console-mode-only'-nya FreeBSD, i286 tinggal sejarah, PC-XT/AT --kalau anda pernah dengar, sudah jadi barang antik di musium, dan IBM PC 8086 4.7MHz yang resolusi monitornya cuma setengah dari ponsel jaman sekarang, kini tinggal sisa-sisa fosil. Pendeknya hampir semua PC operasional saat ini sudah memiliki prosesor numerik built-in 'take for granted' di dalamnya.


Latar Belakang


Ketika berencana untuk memasukkan prosesor numerik dalam prosesor 8086-nya, J. Palmer dari Intel menyadari bahwa para insinyur dan disainer chips bukanlah orang yang tepat untuk merancang format numerik, untuk itu dia menyewa khusus orang-orang terbaik di bidang analisa numerik, mereka adalah: J. Coonen, W. M. Kahan, dan H.S. Stone, yang membuat desain sebegitu bagusnya sehingga diadopsi oleh IEEE sebagai format standar floating point, --artinya semua prosesor yang konform dengan IEEE akan menggunakan format Floating Point yang sama, suatu hal yang sangat memudahkan bagi para perancang kompiler.

Floating Point Unit (FPU) x87 awalnya cuma pendamping untuk processor 80186, diteruskan oleh penerusnya: i286, i386, dan i486-SX. mulai kelas x486-Dx (keluar tahun 1989) dan sesudahnya, Intel mengemas processor utama dan numerik dalam satu prosesor (sepertinya memang sudah seharusnya demikian, bukan?), sehingga tidak ada lagi processor numerik terpisah.


----------------------------------------------------

A. Format dan Tipe Data

A.1. Integer dan Floating Point


Berbeda dari bilangan integer yang jaraknya selalu konstan: satu, antara dua bilangan real selalu akan terdapat nilai yang banyaknya tak terhingga, sehingga masalah utama dalam menyusun struktur format Floating Point adalah memaksimalkan jangkauan (range) bilangan dalam keterbatasan memori/register yang ada tanpa mengorbankan terlalu banyak akurasi perhitungan (baik normal maupun transedental), minimum overhead untuk kecepatan akses dan struktur diatur sedemikian rupa sehingga memudahkan untuk operasi lanjutan. Tujuan inilah yang ingin dicapai oleh para perancang format Floating Point.


catatan:

  • operasi normal adalah: penjumlahan, pengurangan, perkalian dan pembagian
  • operasi transedental misalnya: log, sin, cos, dan tan.


Seperti pada integer, Floating Point juga menggunakan basis 2 (biner) untuk merepresentasikan sebuah bilangan (disebut juga sebagai binary-floating-point) yang mencakup suatu subset dari continuum bilangan real (antara minus tak-hingga s.d. plus tak-hingga). Struktur format Floating Point selanjutnya menentukan range dari bilangan real yang dapat digunakan dalam perhitungan.


A.2. Struktur

Struktur Data Floating Point (berturut-turut dari Most-ke-Least Significant-Bit) terdiri atas:

  • a. sign bit: bit penanda negatif/positif
  • b. exponent: eksponen digit, kepangkatan dari: dua
  • c. 1: satu
  • d. mantissa fraction (atau disebut juga trailing significand): desimal digit, pecahan kurang dari: satu

Dalam referensi Intel, butir c. dan d. diatas sebagai kesatuan disebut sebagai Significand, berdasarkan nilai inilah diperoleh angka-angka atau digit sesungguhnya.


A.2.1. Sign bit

Tidak seperti format integer yang menggunakan notasi two's-complement, format Floating Point menggunakan notasi one's-complement, artinya selalu berupa nilai positif (operasi NEG adalah 2's complement, sementara operasi NOT adalah 1's complement). Nilai negatif semata-mata ditunjukkan oleh sign-bit, implikasinya, dalam floating Point terdapat ambiguitas nilai-0 yang bisa bertanda negatif atau positif tergantung dari instruksi/operasi, namun ini tidak jadi masalah, di seluruh operasi aritmetik, kedua nilai 0 tersebut dianggap identik.


A.2.2. Exponent

Format exponent sama dengan format integer positif (unsigned), dibaca seperti layaknya membaca integer, dengan satu interpolasi khusus yaitu: dihitung dengan menyertakan suatu konstanta tertentu yang disebut sebagai bias (dikurangi nilainya dengan bias). Misalnya jika exponent = 10 dan bias = 100, maka nilainya setelah penyesuaian bias adalah 10-100 = -90. Dalam beberapa referensi, nilai setelah penyesuaian bias ini disebut juga sebagai 'True Exponent'. Dengan penyesuaian ini, selain tetap mengakomodasi negatif exponensial, struktur bit-per-bit (bitwise) data bilangan akan menjadi simetris, berurut dari nilai yang terkecil sampai terbesar, keuntungannya antara lain adalah: mengurutkan data Floating Point akan sama mudahnya dengan mengurutkan data integer, tidak memerlukan algoritma khusus.

Nilai bias diperoleh dari nilai maksimum dalam format integer (signed), atau separuh dari nilai maksimum (high value) dalam format integer positif (unsigned). Nilai ini juga merupakan batas minimum dan maksimum dari nilai exponent (max = bias, min = -(bias-1)).

Contohnya, untuk tipe data Single dengan exponent berukuran 8-bit, nilai biasnya adalah: 127 (2^7-1), tipe Double dengan 11 bit exponent: 1023 (2^10-1), dan Double-Extended dengan 15 bit exponent: 16383 (2^14-1)


Tipe Data exponent low high bias minmax
Single 8 bit 0 255 127 -126 +127
Double 11 bit 0 2047 1023 -1022 +1023
Double Extended 15 bit 0 32767 16383 -16384 +16383

Tabel A.2.2. Contoh nilai bias dari beberapa tipe data Floating Point


A.2.3. bit 1 (satu)

Dalam bilangan desimal (basis-10), suatu nilai, misalnya: 9000, bisa dinotasikan sebagai 9.0 x 10^3 (atau 9.0 E+3). Contoh lain, 0.07890 bisa dinotasikan juga sebagai 7.89 x 10^-2 (atau 7.89 E-2)

Berapapun nilainya, suatu bilangan desimal dapat dinotasikan sebagai N.XXX... x 10^Y atau N.XXX... E+Y (Y bisa berupa nilai negatif, N bilangan bulat selain 0), dengan notasi ini dapat dilihat bahwa nilai N diatas akan lebih besar dari 0 dan lebih kecil dari 10, 0 < N < 10.

Penyederhanaan notasi diatas disebut juga sebagai di-normalisir

Seperti telah disebutkan dalam butir A.1., format Floating Point menggunakan notasi biner, jika dilakukan normalisasi pada bilangan tersebut maka nilai N (analog dengan bilangan desimal diatas) pasti lebih besar dari 0 dan lebih kecil dari 2, 0 < N < 2, atau sama dengan 1.

Hal itulah yang dilakukan oleh format Floating Point, melakukan normalisasi bilangan sehingga menghasilkan Most-Significant-Bit (MSB) dari Significand akan selalu sama dengan 1, bentuk ini disebut juga sebagai NORMALIZED.

Karena nilai 1 ini tidak pernah berubah, maka kemudian nilai ini dihapus/dieliminasi agar lebih efisien (ada tambahan 1-bit untuk mantissa). Tapi, meskipun tidak tampak, nilai 1 ini selalu dianggap ada (implisit), kecuali untuk tipe Double-Extended. Nilai 1 dalam tipe Double-Extended tidak dieliminasi dan dinyatakan secara eksplisit. Selain perbedaan ini, struktur format tipe Single, Single-Extended, Double, dan Double-extended adalah identik.


catatan:

  • Dalam tipe Double-Extended kapasitas Significand adalah 64-bit, atau persis kelipatan dword/qword sehingga lebih mudah dan cepat untuk diakses apa adanya.
  • Anomali tipe Double-Extended berlaku juga untuk proprietary Intel Itanium (IA-64) 82-bits Extended-Register.
  • Karena keterbatasan kapasitas register, untuk merepresentasikan bilangan yang sangat kecil (di kisaran 2^E-high) bisa terjadi MSB Signifand bernilai 0, kasus ini disebut DENORMALIZED (sekarang disebut SUBNORMAL).
  • Jika terjadi denormal/subnormal, bit-satu seperti disebut dalam butir A.2.c diatas tidak lagi bernilai satu tapi nol.


Format 2^ 10^ 2^ 10^
Single -149 -46 -126..-150 -38
Double -1074 -324 -1022..-1075 -308
Extended -16445 -4951 -16382..-16445 -4932

Tabel A.2.3. Jangkauan nilai subnormal


A.2.4. Mantissa fraction

Mantissa fraction adalah bagian pecahan dari Significand (setelah bit 1, baik implisit maupun explisit).

Significand adalah kesatuan butir A.2.c dan A2.d diatas

Significand pangkat exponent setelah penyesuaian bias (true-exponent) adalah nilai sebenarnya yang ingin direpresentasikan oleh data Floating Point yang bersangkutan.

Lihat juga butir A.4. tentang Kondisi Khusus.


A.3. Tipe Data Floating Point, IEEE Standard 754 conformant tediri dari:

  • a. Binary16, 16 bit
  • b. Single Precision (Binary32), 32-bit
  • c. Single-Extended Precision, 43-bit
  • d. Double Precision (Binary64), 64-bit
  • e. Double-Extended Precision, 80-bit
  • f. Itanium (IA-64) Double-Extended Precision, 82-bit
  • g. Quadruple Precision (Binary128), 128-bit


Tipe Lebar Exp Significand Range biner Range desimal digit signifikan
1 mantissa
Binary16 16 5 0 (imp) 10 2^-14..2^15 0.000061..32768 4-6
Single 32 8 0 (imp) 23 2^-126 .. 2^127 1.18E-38 .. 3.40E+38 6-9
Single Extended 44 10 1 (exp) 32 2^-1022 .. 2^1023 1.18E-38 .. 3.40E+38 11-12
Double 64 10 0 (imp) 53 2^-1022..2^1023 2.23E-308..1.79E+308 15-17
Double Extended 80 15 1 (exp) 63 2^-16382..2^16383 3.37E-4932..1.18E+4932 18-21
Itanium FP-Reg 82 17 1 (exp) 63 2^-65534..2^65535 5.00E-19729..1.00E+19729 18-21
Quadruple 128 15 0 (imp) 112 2^-16382..2^16383 3.37E-4932..1.18E+4932 33-36

Tabel A.3. Tipe Data Floating Point


catatan:

  • Beberapa sumber menyatakan bahwa hanya terdapat 3 format standar IEEE, yaitu: single, double dan quadruple. Tapi supaya jelas perbedaannya, dalam tulisan ini disebutkan seluruh varian (baik interpretasi maupun implementasi) dari format IEEE 754:
  • 128-bit Quad Precision Floating Point ditambahkan dalam revisi IEEE Standard 754 tahun 2004.
  • Revisi IEEE 754 2006 menggunakan istilah: binary16, binary32, binary64 dan binary128.
  • Single-Extended Precision tidak umum dipakai, sejak awal munculnya x87, Intel tidak pernah menggunakan tipe ini.
  • Secara internal, Intel x87 menggunakan tipe 80-bits Double-Extended, sementara kelas Itanium menggunakan tipe 82-bits Extended-Register Floating-Point.


A.4. Kondisi Khusus.

Jika nilai true exponent sama dengan min atau max (nilai exponent sama dengan 0 atau high) terjadi nilai-nilai khusus sbb.


true-exponent mantisa status/nilai
min 0 nol/underflow/overflow
min > 0 denormal (subnormal)
max 0 tak-hingga (infinite)
max > 0 bukan angka (not-a-number atau NaN)

Tabel A.4.1 Kondisi khusus


Formasi bit pada underflow untuk sign-bit=1 (negatif) dan overflow (positif), sama dengan formasi bit untuk nilai 0, bedanya kondisi ini memicu exception yang mengindikasikan bahwa operasi sebelumnya menimbulkan undeflow/overflow.


Kondisi NaN terdiri dari quiet-NaN, signaling-Nan, serta nilai tak-tentu. Selain untuk keperluan pengurutan (sorting), NaN juga berpengaruh terhadap kontrol program, karena prosesor akan bereaksi berbeda sesuai jenis NaN ini. Perbedaan antara signaling NaN dan quiet-NaN hanya terletak pada most-significant-bit (MSB) dari mantissa fraction sbb:

  • Signaling NaN (SNaN): MSB-bit dari mantissa fraction = 0
  • Quiet Nan (QNaN): MSB-bit dari mantissa fraction = 1

Selanjutnya terdapat kondisi tak-tentu pada QNaN jika sign-bit=1 DAN hanya MSB mantissa-fraction yang bernilai=1 (bit mantissa-fraction lainnya=0). Jika sign-bit=0 (bilangan positif) kondisi ini termasuk kedalam QNaN. Kondisi tak-tentu sebagian merupakan konsekuensi dari implisit bit (karena sebetulnya tidak dapat dipastikan dari hasil operasi, apakah bit-satu bernilai 1 atau 0). Pada prosesor intel, semua kondisi NaN mengeset eksplisit bit=1 (QNaN) dan kondisi tak-tentu menandakan terjadinya invalid-operation (misalnya seperti operasi 0/0).


Kondisi range biner/simbol range dalam hexa
Sign Exponent (e) 23-bit Mantissa
-QNaN 1 high 11111111111111111111111 s.d.
     10000000000000000000001
FFFFFFFF ~ FFC00001
Indefinite 1 high 10000000000000000000000 FFC00000
-SNaN 1 high 01111111111111111111111 s.d.
     00000000000000000000001
FFBFFFFF ~ FF800001
-Infinite 1 high 0 FF800000
-Normal 1 0 < e < high 0 s.d.
     11111111111111111111111
FF7FFFFF ~ 80800000
-DeNormal 1 0 11111111111111111111111 s.d.
     00000000000000000000001
807FFFFF ~ 80000001
-0 1 0 0 80000000
+0 0 0 0 0
+DeNormal 0 0 00000000000000000000001 s.d.
     11111111111111111111111
00000001 ~ 007FFFFF
+Normal 0 0 < e < high 0 s.d.
     11111111111111111111111
00800000 ~ 7F7FFFFF
+Infinite 0 high 0 7F800000
+SNaN 0 high 00000000000000000000001 s.d.
     01111111111111111111111
7F800001 ~ 7FBFFFFF
+QNan 0 high 10000000000000000000000 s.d.
     11111111111111111111111
7FC00000 ~ 7FFFFFFF

Tabel A.4.2. Pola bit dan status dari tipe data Single Precision (32-bit)


Dalam ringkasan dibawah, supaya lebih mudah digambarkan, kita buat suatu tipe data floating point hipotetik yang memiliki 8-bit significand (dengan bit-1 implisit).


exponent true-exponent significand (bin-8) status
0 min 0 nol
0 min 0 underflow/overflow
0 min > 0 subnormal
1..high-1 min+1..max-1 sebarang normal
high max 0 tak-hingga
high max 00000001..01111111 SNaN
high max 10000000 tak-tentu/QNaN
high max 10000001..11111111 QNan

Tabel A.4.3. Ringkasan Status Nilai Data Floating Point, tanpa sign-bit


----------------------------------------------------

B. Pengolahan Data Numerik


B.1. Tipe Data (Review)

Tipe data yang dikenal oleh prosesor Intel


B.1.1 Integer

  • byte 8-bit
  • word 16-bit
  • double word 32-bit
  • quad word 64-bit
  • double quad word 128-bit


[GAMBAR]


B.1.2. Real

  • single 32-bit
  • double 64-bit
  • extended 80-bit
  • extended 92-bit

[GAMBAR]


B.1.3. Esoterik (dikenal secara tidak langsung melalui operasi yang dikhususkan untuk tipe data ybs. atau dari pengaruhnya terhadap register flags)

  • boolean, 1 bit
  • nibble 4-bit
  • BCD 8-bit (hanya low-nibble yang digunakan)
  • packed-BCD 8-bit (2 digit desimal per-byte)
  • packed-BCD 80-bit (18 digit desimal dengan sign-bit)
  • packed word 8 x word, 128-bit
  • packed dword 4 x dword, 128-bit
  • packed qword 2 x qword, 128-bit
  • packed single 4 x single, 128-bit
  • packed double 2 x double, 128-bit

[GAMBAR]


B.2. Register Floating Point Unit

B.2.1. FPU Stack

Register FPU stack terdiri dari 8 unit register numerik masing-masing berukuran 80-bit bertipe double-extended, tersusun dalam tumpukan (stack) yang diberi nomor urut menurun dari 7 s.d. 0, diakses dan diperlakukan sperti register stack biasa: diakses langsung register tertentu atau dengan menggunakan instruksi push/pop. Sebagai indikator terdapat TOP di register status yang menunjukkan sisa register FPU stack yang tersedia.

Semua operasi Floating Point (kecuali operasi kontrol) akan melibatkan register FPU stack, penomoran/pengalamatan dilakukan secara relatif dari top-of-stack saat ini. Jika operand register FPU tidak disebut secara explisit, kebanyakan assembler akan menterjemahkan sebagai top-of-stack saat ini atau st(0).

Yang perlu diingat adalah bahwa kebanyakan operasi aritmetik akan secara otomatis memuat hasil perhitungan kedalam FPU stack (push FPU stack) yang merubah susunan FPU stack. Jika suatu nilai sebelumnya diakses dengan st(n), setelah operasi semacam ini nilai yang sama akan terdapat di st(n+1).


catatan:

  • indikator TOP sebetulnya menunjukkan top-of-stack saat ini, dalam operasi normal (tanpa trik yang memodifikasi langsung status FPU) nilainya tidak terlalu diperhatikan, karena pengalamatan register selalu menggunakan st(n) --berupa offset relatif dari TOP itu sendiri.


B.2.2. Control

Control word, berukuran 16-bit, tidak berupa register fisik, untuk membacanya harus dimuat dulu dengan instruksi FLDCW kedalam register/memori 16-bit, atau menggunakan instruksi FLDENV dan FSAVE/FNSAVE:


FPU Control Word

FEDC BA98 7654 3210
reserved ICRCPC reserved PUOZDI
  rsv. - RESERVED (dicadangkan)

  IC - Infinity Control, hanya di prosesor intel287™, sekarang tidak digunakan lagi.

  RC - Rounding Control (pembulatan)
    00 : pembulatan terdekat (nearest or even)
    01 : pembulatan kebawah menuju -Infinite
    10 : pembulatan keatas menuju +Infinite
    11 : pembulatan integer

  PC - Precision COntrol
    00 : 24-bit (single)
    01 : dicadangkan
    10 : 53-bit (double)
    11 : 64-bit (extended)

  bit 0 s.d. 5 adalah Exception Masks, berkorespondensi dengan register Status:
    P : Precision
    U : Underflow
    O : Overflow
    Z : Zero Divide
    D : Denormalized Operand
    I : Invalid Operation


catatan:

  • Untuk mempertahankan akurasi pembulatan, terutama dalam kasus relative error yang tinggi, secara internal, FPU memiliki 3 bit tambahan (guard, round dan sticky).
  • Bilangan real mungkin akan dibulatkan jika tempat penyimpanan akhir (destination operand) berupa format integer atau format real yang ukurannya lebih kecil.


B.2.3. Status

Status word, berukuran 16-bit, tidak berupa register fisik. untuk membacanya harus dimuat dulu ke memori dengan instruksi FLDENV atau FSAVE/FNSAVE:


FPU Status Word

FEDC BA98 7654 3210
BC3TOP C2C1C0ES PUOZDI
  B - Busy Flag
  C0 s.d. C3 - Condition Code
   korespondensi dengan Integer Flags
    C0 ~ Carry Flag (CF)
    C1 ~ tidak ada kesetaraan
    C2 ~ Parity Flag (PF)
    C3 ~ Zero Flag (ZF)

  TOP - nilai top-of-stack saat ini
  E - Error Summary
  S - Stack Fault

  bit 0 s.d. 5 adalah Exception Flags, berkorespondensi dengan register Kontrol:
  P : Precision
  U : Underflow
  O : Overflow
  Z : Zero Divide
  D : Denormalized Operand
  I : Invalid Operation

Interpretasi Condition Code


InstruksiC0C3C2C1
FTST, FCOM/P/PP, FICOM/P, FUCOMPP hasil perbandingan operand tak terbandingkan 0 atau error Over/Underflow
FXAM kelas operand sign-bit atau error O/U
FPREM,FPREM1 Quad-2 Quad-1 0: tuntas
1: tidak tuntas
Quad-0 atau error O/U
FIST, FBSTP, FRINDINT, FST/P,
     FADD, FMUL, FDIV/R, FSUB/R,
FSCALE, FSQRT, FPATAN,
F2XM1, FYL2X, FYL2XP1
nilai tidak tentu pembulatan keatas atau error O/U
FPTAN, FSIN, FCOS, FSINCOS nilai tidak tentu 0: tuntas
1: tidak tuntas
pembulatan keatas atau error O/U,
     jika C2=1 maka nilainya tidak tentu
FCHS, FABS, FXCH, FINCSTP, FDECSTP,
     muat Konstanta tertentu, FXTRACT,
FLD, FILD, FBLD, FSTP extended
nilai tidak tentu 0 atau error O/U
FLDENV, FRSTOR sesuai dengan nilai yang tersimpan/dimuat
FLDCW, FSTENV, FSTCW, FSTSW, FCLEX nilai tidak tentu
FINIT,FSAVE 0

Tabel B.2.3. Interpretasi kode kontrol hasil instruksi floating point


B.2.4. Tag

Tag word, berukuran 16-bit, tidak berupa register fisik. untuk membacanya harus dimuat dulu ke memori dengan instruksi FLDENV atau FSAVE/FNSAVE kedalam memori:

Tag word berisi status seluruh isi FPU stack (8 unit register). TAG-0 berisi status st(0), TAG-1 berisi status st(1), dan seterusnya sampai TAG-7.


FPU Tag

F E D C B A 9 8 7 6 5 4 3 2 1 0
tag 7 tag 6 tag 5 tag 4 tag 3 tag 2 tag 1 tag 0
Nilai Tag:
  00 = Valid
  01 = 0 (nol)
  10 = Kondisi khusus: Invalid (NaN atau unsupported), tak-hingga atau DENORMAL/SUBNORMAL
  11 = Kosong


----------------------------------------------------

C. Instruksi Numerik

[TODO]


C.1. Transfer Data: Load/Store/Exchange Data

[TODO]


C.2. Operasi Aritmetik: Penjumlahan, Pengurangan, Perkalian, Pembagian, Akar Kuadrat, Skala, Ekstrak, Pembulatan, Bilangan Mutlak, Pecahan, dan Negasi

[TODO]


C.3. Operasi Transedental: Sinus, Cosinus, Sin/Cos, Tangen dan Arctangen, 2^x-1, Logaritma basis 2: y Log 2^X dan y Log 2^(X+1)

[TODO]


C.4. Konstanta: 0, 1, pi, 2 Log 10, 10 Log2, 2 Log e, e Log 2

[TODO]


C.5. Kontrol: Load/Store Control/Status/Environment, Save/Restore/Clear Exception dan Intialisasi

[TODO]

----------------------------------------------------

D. Contoh Program

[CODE-REF]

Delphi interface:
  Ordinals.pas
  BigIntX.pas
----------------------------------------------------

E. Ringkasan

[TODO]

----------------------------------------------------

F. Rujukan

Rujukan pilihan:

  • "Standard for Floating-Point Arithmetic P754", Draft 1.9, IEEE Computer Society, 2006.
  • "IEEE Standard 754 for Binary Floating-Point Arithmetic", William Kahan, on Lecture Notes on the Status of, 1997.
  • "IEEE Standard 754 Floating Point Numbers", Steve Hollasch, 2001.
  • "Intel Itanium Architecure Software Developer's Manual", Vol.1: Application Architecture, 1:75-98, Intel Corp., 2002.
  • "Intel Itanium Architecure Software Developer's Manual", Vol.3: Instruction Set Reference, 3:821-832, Intel Corp., 2002.
  • "Pentium Processor Family Software Developer's Manual", Vol.3: Architecture and Programming Manual, 6:1-42,7:1-18,25:84-161, Intel Corp., 1995.
  • "What Every Computer Scientist Should Know About Floating Point Arithmetic", 176-178, David Goldberg, Assoc. for Computing Machinery, Inc., 1991.


Bacaan tambahan:

  • "(Complete) Tutorial to Understand IEEE Floating Point Errors", Microsoft Knowledge Base Q42980, Microsoft Corp., 2005.
  • "Differences Among IEEE 754 Implementations", Sun Microsystems Inc., 1997.
  • "Floating Point Processor." Microsoft® Encarta® 2005 [DVD]. Redmond, WA: Microsoft Corp., 2004.
  • "General Decimal Arithmetic Specification", Mike Cowlishaw, IBM UK Lab., 2003.
  • "How Futile are Mindless Assesments of Roundoff in Floating-Point Computation", William Kahan, 2006.
  • "IEEE Floating point Standard", Wikipedia, Internet, 2005.
  • "Let's Get to the (Floating) Point", 20-22, Chris Hecker, Game Developer, 1997.
  • "Representation of IEEE 754 Floating Point Format", Motorola Inc., 2000.
  • "The Art Of Assembly Language", 771-778, Randall Hyde, 2002.
  • "The Art of Computer Programming", Donald E Knuth, 2nd Edition, Vol.2: Seminumerical Algorithms, 198-210, 213-227, Addison-Wesley, 1981.


Web Ref: