Presisi Pecahan, Pembulatan, dan Pengecualian
Pahami representasi IEEE 754, mode pembulatan, serta cara unit FPU dan SSE memberi sinyal pengecualian seperti overflow, underflow, dan operasi yang tidak valid.
Presisi Pecahan, Pembulatan, dan Pengecualian adalah pelajaran Assembly Language & x86 Low-Level Systems Programming gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Assembly Language & x86 Low-Level Systems Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Assembly Language & x86 Low-Level Systems Programming mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
IEEE 754 Format
x86 floating-point follows the IEEE 754 standard. A number is stored as sign, exponent, and mantissa:
- Single (32-bit): 1 + 8 + 23
- Double (64-bit): 1 + 11 + 52
- Extended (80-bit): used internally by the x87 FPU
Why Precision Matters
Most decimal fractions cannot be represented exactly in binary. For example 0.1 + 0.2 does not equal exactly 0.3. Accumulated rounding error is a core hazard in numerical code.
The Four Rounding Modes
IEEE 754 defines four rounding modes:
- Round to nearest, ties to even (default)
- Round toward negative infinity (floor)
- Round toward positive infinity (ceil)
- Round toward zero (truncate)
Controlling Rounding on x87
The x87 control word holds the rounding-control (RC) bits. You read it with fstcw, modify, then load with fldcw.
sub esp, 4
fstcw [esp] ; store control word
or word [esp], 0x0C00 ; RC = 11 -> round toward zero
fldcw [esp] ; load it back
add esp, 4SSE MXCSR Register
SSE has its own control/status register, MXCSR. It holds rounding-control bits plus exception masks and flags. Manage it with ldmxcsr and stmxcsr.
sub rsp, 4
stmxcsr [rsp] ; save MXCSR
ldmxcsr [rsp] ; restore MXCSR
add rsp, 4Floating-Point Exceptions
The standard defines six exceptions:
- Invalid (e.g. 0/0, sqrt of negative)
- Denormal operand
- Divide by zero
- Overflow
- Underflow
- Inexact (rounding occurred)
Masked vs Unmasked
Each exception can be masked. A masked exception produces a default result (like infinity or NaN) and sets a flag. An unmasked exception raises a CPU trap so your handler can intervene.
Special Values: NaN and Infinity
IEEE 754 reserves bit patterns for special values:
- +Inf / -Inf from overflow or divide-by-zero
- NaN (Not a Number) from invalid operations
Any comparison with NaN is false — even NaN == NaN.
Detecting NaN
Because NaN is unordered, you detect it with an unordered compare. In SSE, ucomiss sets the parity flag when an operand is NaN.
ucomiss xmm0, xmm0 ; compare value with itself
jp is_nan ; PF set => NaN detectedA Runnable C Demonstration
This self-contained C program shows that floating-point addition is not exact and detects a NaN.
#include <stdio.h>
#include <math.h>
int main(void) {
double a = 0.1 + 0.2;
printf("0.1+0.2 = %.17f\n", a);
printf("equals 0.3? %d\n", a == 0.3);
double nan_val = 0.0 / 0.0;
printf("isnan? %d\n", isnan(nan_val));
return 0;
}Practical Advice
To write robust floating-point code:
- Never compare floats with
==; use an epsilon tolerance - Be aware of accumulation order in sums
- Keep the default round-to-nearest unless you have a reason
- Check status flags after risky operations
Quick Check
Test your floating-point knowledge.
Recap
You explored floating-point behavior:
- IEEE 754 defines single, double, and 80-bit extended formats
- Four rounding modes are configured via the x87 control word or MXCSR
- Six exceptions can be masked (default result + flag) or unmasked (trap)
- NaN and infinity are special values; NaN compares false to everything
Belajar Assembly dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Presisi Pecahan, Pembulatan, dan Pengecualian” gratis?
Ya — teks lengkap “Presisi Pecahan, Pembulatan, dan Pengecualian” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Assembly Language & x86 Low-Level Systems Programming, upgrade ke CoddyKit PRO. Kursus Assembly Language & x86 Low-Level Systems Programming mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Presisi Pecahan, Pembulatan, dan Pengecualian”?
Pahami representasi IEEE 754, mode pembulatan, serta cara unit FPU dan SSE memberi sinyal pengecualian seperti overflow, underflow, dan operasi yang tidak valid. Kamu berlatih Assembly Language & x86 Low-Level Systems Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Assembly Language & x86 Low-Level Systems Programming?
Tidak diperlukan pengalaman sebelumnya. Assembly Language & x86 Low-Level Systems Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Presisi Pecahan, Pembulatan, dan Pengecualian” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Assembly Language & x86 Low-Level Systems Programming ini?
Ya. Setiap pelajaran Assembly Language & x86 Low-Level Systems Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar Pemrograman FPU x87
- Pengenalan Set Instruksi SSE/AVX
- Vektorisasi Kode dengan SIMD
- Presisi Pecahan, Pembulatan, dan Pengecualian