Lesson 01 — Số và trục số

Bộ công cụ tương tác: trục số, phân loại số theo ℕ/ℤ/ℚ/ℝ\ℚ, và demo sai số float trong máy tính.

1. Trục số tương tác

Click bất kỳ điểm nào trên trục để chọn A. Click tiếp để chọn B. Lần click thứ ba reset về A. Trục hiển thị từ −10 đến 10.

A = |A| = B = |B| = Khoảng cách |A − B| =
Snap on: chọn số nguyên. Snap off: chọn số thực tới 1 chữ số thập phân.

2. Phân loại số

Hỗ trợ: số nguyên (3, -7), số thập phân (0.5), phân số (22/7), căn (sqrt(2), sqrt(4)), hằng số (pi, e), tuần hoàn (0.333...).

Một số tự nhiên cũng đồng thời là nguyên, hữu tỉ, thực — vì ℕ ⊂ ℤ ⊂ ℚ ⊂ ℝ. Mọi nhãn tô đậm bên dưới là tập nhỏ nhất chứa số đó.

TậpKý hiệuVí dụ click thử
Tự nhiên
Nguyên
Hữu tỉ
Vô tỉℝ\ℚ

3. Demo sai số float — vì sao 0.1 + 0.2 ≠ 0.3?

Trong máy tính, float64 lưu số dưới dạng nhị phân với 52 bit định trị. 0.1₁₀ trong hệ 2 là chuỗi tuần hoàn vô hạn 0.000110011001100…₂, phải cắt sau 52 bit → lệch một chút. Khi cộng, sai số tích lũy.

Bấm các nút trên để xem demo. Mỗi thí nghiệm in cả phép `==` trực tiếp và `almostEqual` với epsilon.

Tự thử phép tính

Cách so sánh đúng: almostEqual

func almostEqual(a, b, eps float64) bool {
    diff := a - b
    if diff < 0 { diff = -diff }
    return diff < eps
}

// Dùng:
almostEqual(0.1+0.2, 0.3, 1e-9)  // true ✓