Bạn có thể kiểm tra xem triển khai của mình có nó không:
#include <math.h>
#ifdef NAN
#endif
#ifdef INFINITY
#endif
Sự tồn tại của INFINITY
được đảm bảo bởi C99 (hoặc ít nhất là bản nháp mới nhất) và "mở rộng thành một biểu thức không đổi của kiểu float đại diện cho vô cùng dương hoặc không dấu, nếu có; khác với một hằng số dương của kiểu float tràn tại thời điểm dịch."
NAN
có thể được xác định hoặc không, và "được xác định nếu và chỉ khi việc triển khai hỗ trợ các NaN yên tĩnh cho kiểu float. Nó mở rộng thành một biểu thức không đổi của kiểu float đại diện cho một NaN yên tĩnh."
Lưu ý rằng nếu bạn đang so sánh các giá trị dấu phẩy động và thực hiện:
a = NAN;
thậm chí sau đó,
a == NAN;
là sai. Một cách để kiểm tra NaN sẽ là:
#include <math.h>
if (isnan(a)) { ... }
Bạn cũng có thể làm: a != a
để kiểm tra xem a
có phải là NaN không.
Ngoài ra còn có isfinite()
, isinf()
, isnormal()
, và signbit()
macro trong math.h
trong C99.
C99 cũng có các nan
chức năng:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
(Tham khảo: n1256).
Tài liệu INFINITY
Tài liệu NAN