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 != NaNluô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