Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

NaN trong C++ là gì?

NaN là viết tắt của Not a Number (Không phải số). Đây là một giá trị đặc biệt của kiểu số thực (floating-point) biểu thị kết quả không xác định hoặc không thể biểu diễn được trong toán học.

Các trường hợp phổ biến tạo ra NaN

  • Căn bậc hai của số âm: sqrt(-5)
  • Phép chia 0 cho 0: 0.0 / 0.0
  • Phép trừ vô cùng: INFINITY - INFINITY
  • Các phép toán không hợp lệ khác: log(-1), asin(2)

Ví dụ minh họa

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    cout << "Square root of -5: " << sqrt(-5) << endl;
    cout << "0.0 / 0.0 = " << 0.0 / 0.0 << endl;
    cout << "log(-1) = " << log(-1) << endl;
}

Kết quả

Square root of -5: nan
0.0 / 0.0 = nan
log(-1) = nan

Kiểm tra NaN

Sử dụng hàm std::isnan() từ header <cmath> (C++11):

#include <cmath>
#include <iostream>

int main() {
    double result = sqrt(-5);
    if (std::isnan(result)) {
        std::cout << "Kết quả là NaN" << std::endl;
    }
}

Đặc điểm quan trọng

  • NaN không bằng bất kỳ giá trị nào, kể cả chính nó: NaN != NaN luôn trả về true
  • Mọi phép so sánh với NaN đều trả về false
  • Lan truyền: mọi phép toán với NaN đều cho ra NaN