DEV Community

Nazwa Shabrina Zain
Nazwa Shabrina Zain

Posted on

Memahami Underflow dan Overflow Numerik di Earl

Teks ini beberapa dibuat oleh generatif AI

Dalam Earl, seperti dalam banyak bahasa pemrograman lainnya, perhitungan numerik memiliki batas representasi. Ketika nilai hasil perhitungan terlalu besar atau terlalu kecil untuk direpresentasikan dengan tepat, maka akan terjadi overflow atau underflow.

Artikel ini menjelaskan apa itu underflow dan overflow, bagaimana Earl mendeteksinya, serta contoh penggunaannya.

Overflow?

Overflow terjadi saat hasil perhitungan numerik melebihi batas maksimum yang dapat diwakili oleh sistem. Dalam JavaScript (yang digunakan oleh Earl), nilai maksimum yang bisa direpresentasikan secara aman adalah sekitar 1.7976931348623157e+308.

Contoh:

hitung ke :kecil: dari 1 * 1e-324
Enter fullscreen mode Exit fullscreen mode

Hasil:

Peringatan: Overflow numerik terdeteksi. Menyimpan nilai tak hingga (Infinity).
Nilai tidak lolos validasi numerik.
Enter fullscreen mode Exit fullscreen mode

Bagaimana Cara Mendeteksinya?

Earl menggunakan fungsi internal seperti berikut:

function mendeteksiUnderflowOverflow(nilai) {
  if (typeof nilai !== 'number' || Number.isNaN(nilai)) {
    return 'invalid';
  }
  if (!Number.isFinite(nilai)) {
    return 'overflow';
  }
  if (nilai === Infinity) {
    return 'overflow';
  }
  if (nilai !== 0 && Math.abs(nilai) < Number.MIN_VALUE) {
    return 'underflow';
  }
  return 'ok';
}
Enter fullscreen mode Exit fullscreen mode

Dan disertai dengan validasi numerik:

function validasiNumerik(nilai) {
  if (typeof nilai !== 'number' || Number.isNaN(nilai) || !Number.isFinite(nilai)) return false;
  return true;
}
Enter fullscreen mode Exit fullscreen mode

Contoh Penggunaan

atur :angkaArray: = [1 2 3]

untukSetiap :angkaArray: setiap :angka:
    atur :angka: = :angka:
    hitung ke :besar: dari :angka: * 1e307
    hitung ke :kecil: dari :angka: * 1e-323

    tampilkan :besar:
    tampilkan :kecil:
selesai
Enter fullscreen mode Exit fullscreen mode

Hasil:

earl>atur :angkaArray: = [1 2 3]
Variabel 'angkaArray' diatur ke [ 1, 2, 3 ]

untukSetiap :angkaArray: setiap :angka:
earl>    atur :angka: = :angka:
earl>    hitung ke :besar: dari :angka: * 1e307
earl>    hitung ke :kecil: dari :angka: * 1e-323
earl>
earl>    tampilkan :besar:
earl>    tampilkan :kecil:
earl>selesai
Variabel 'angka' diatur ke 1
Variabel 'besar' diatur ke 1e+307
Variabel 'kecil' diatur ke 1e-323
1e+307
1e-323
Variabel 'angka' diatur ke 1
Variabel 'besar' diatur ke 1e+307
Variabel 'kecil' diatur ke 1e-323
1e+307
1e-323
Variabel 'angka' diatur ke 1
Variabel 'besar' diatur ke 1e+307
Variabel 'kecil' diatur ke 1e-323
1e+307
1e-323
Perintah 'untukSetiap' selesai dieksekusi untuk koleksi: :angkaArray:
Enter fullscreen mode Exit fullscreen mode

Atau singkatnya:

1e+307
1e-323
Enter fullscreen mode Exit fullscreen mode

Tips praktis:

  • Gunakan 1e307 untuk mendekati batas atas aman sebelum overflow.
  • Gunakan 1e-323 untuk mendekati batas bawah aman sebelum underflow.
  • Selalu validasi nilai sebelum menyimpan ke variabel penting, terutama dalam loop atau operasi skala besar.

Kesimpulan

Pemahaman tentang underflow dan overflow penting agar perhitungan numerik di Earl tetap akurat dan stabil. Earl menyediakan deteksi dan validasi otomatis untuk membantu pengguna menghindari kesalahan diam-diam (silent failures).

Top comments (0)