0Pricing
C++ Academy · Pelajaran

Batas Numerik dan Perilaku Luapan

Periksa std::numeric_limits dan pahami aturan luapan bertanda serta tak bertanda

Batas Numerik dan Perilaku Luapan adalah pelajaran C++ Academy 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 C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Mengapa Batas Nilai Penting

Setiap tipe numerik memiliki nilai maksimum dan minimum yang dapat direpresentasikan. Melebihinya dapat secara diam-diam menghasilkan keluaran yang salah — atau perilaku tidak terdefinisi.

std::numeric_limits

Periksa batas nilai tipe numerik apa pun dengan header <limits>. Konstanta pada waktu kompilasi — tanpa biaya saat runtime.

#include <limits>
std::cout << std::numeric_limits<int>::max() << "\n";
std::cout << std::numeric_limits<int>::min() << "\n";
std::cout << std::numeric_limits<double>::epsilon();

Pemeriksaan Umum

Anggota yang paling berguna:

  • max() — nilai terbesar
  • min() — nilai terkecil (positif)
  • lowest() — nilai paling negatif
  • epsilon() — perbedaan terkecil yang bermakna (bilangan pecahan)
  • digits10 — digit desimal yang dijamin

Luapan Bilangan Bulat Bertanda

Luapan bilangan bulat bertanda adalah perilaku tidak terdefinisi. Kompilator dapat menganggapnya tidak pernah terjadi, sehingga menghasilkan optimasi yang mengejutkan.

int x = std::numeric_limits<int>::max();
x += 1;   // UB — anything can happen

Peluapan Bilangan Bulat Tak Bertanda

Peluapan bilangan tak bertanda memiliki perilaku yang terdefinisi — nilainya berputar menurut modulo 2^N. Ini terkadang berguna, tetapi sering menjadi sumber kesalahan.

unsigned int u = 0;
u -= 1;   // wraps to 4,294,967,295 (UINT_MAX)

Peluapan dan Kekurangan Aliran Bilangan Pecahan

Bilangan pecahan meluap menjadi inf, bukan menyebabkan program berhenti. Kekurangan aliran menghasilkan bilangan subnormal atau 0.

double x = 1e308;
x *= 100;
std::cout << x;  // inf

Mendeteksi Luapan dengan Aman

Untuk bilangan bulat bertanda, lakukan pemeriksaan sebelum operasi. Kompilator menyediakan pembantu aritmetika terperiksa bawaan seperti __builtin_add_overflow pada GCC/Clang.

if (a > std::numeric_limits<int>::max() - b) {
    // overflow would happen
}
int sum = a + b;

C++20 std::ssize dan std::cmp_less

C++20 menambahkan pembantu perbandingan bilangan bulat yang aman di <utility>: std::cmp_equal, cmp_less, cmp_greater. Pembantu ini menangani pencampuran bilangan bertanda dan tak bertanda dengan benar.

Konversi Implisit Itu Menipu

Mencampur bilangan bertanda dan tak bertanda dalam perbandingan secara diam-diam mengonversi operan bertanda menjadi tak bertanda — sumber umum bug yang sulit ditemukan.

int a = -1;
unsigned int b = 1;
if (a < b) std::cout << "yes";
else       std::cout << "no";   // prints "no"!

Pemeriksaan Waktu Kompilasi

Gunakan static_assert untuk menegakkan asumsi ukuran saat menulis kode portabel.

static_assert(sizeof(int) >= 4, "Need at least 32-bit int");

Sanitizer Membantu dalam Pengujian

Bangun program dengan -fsanitize=undefined untuk menangkap luapan bilangan bertanda saat runtime selama pengujian.

g++ -fsanitize=undefined -O1 main.cpp

Pemeriksaan Singkat

Apa yang terjadi saat penjumlahan bilangan bulat bertanda meluap dalam C++?

Ringkasan

Gunakan std::numeric_limits untuk memeriksa batas tipe. Luapan bertanda tidak terdefinisi; luapan tak bertanda berputar. Campurkan bilangan bertanda dan tak bertanda dengan risiko Anda sendiri. Sanitizer dan perbandingan aman C++20 membantu melindungi kode Anda.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Batas Numerik dan Perilaku Luapan” gratis?

Ya — teks lengkap “Batas Numerik dan Perilaku Luapan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Batas Numerik dan Perilaku Luapan”?

Periksa std::numeric_limits dan pahami aturan luapan bertanda serta tak bertanda Kamu berlatih C++ Academy 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 C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy 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 “Batas Numerik dan Perilaku Luapan” 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 C++ Academy ini?

Ya. Setiap pelajaran C++ Academy 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

  1. Tipe Bilangan Bulat vs Titik Mengambang
  2. Header cmath: pow, sqrt, abs, round
  3. Bilangan Acak dengan Header random
  4. Batas Numerik dan Perilaku Luapan
← Kembali ke C++ Academy