.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de) .\" Distributed under GPL, 2002-07-27 Walter Harms .\" This was done with the help of the glibc manual. .\" .\" 2004-10-31, aeb, corrected .TH FPCLASSIFY 3 2007-07-26 "" "Linux Programmer's Manual" .SH NAME fpclassify, isfinite, isnormal, isnan, isinf \- floating-point classification macros .SH SYNOPSIS .nf .B #include .sp .BI "int fpclassify(" x ); .sp .BI "int isfinite(" x ); .sp .BI "int isnormal(" x ); .sp .BI "int isnan(" x ); .sp .BI "int isinf(" x ); .fi .sp Link with \fI\-lm\fP. .sp .in -4n Feature Test Macro Requirements for glibc (see .BR feature_test_macros (7)): .in .sp .\" I haven't fully grokked the source to determine the FTM requirements; .\" in part, the following has been tested by experiment. .ad l .BR fpclassify (), .BR isfinite (), .BR isnormal (): _XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE; or .I cc\ -std=c99 .br .BR isnan (): _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE || _ISOC99_SOURCE; or .I cc\ -std=c99 .br .BR isinf (): _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE; or .I cc\ -std=c99 .ad b .SH DESCRIPTION Floating point numbers can have special values, such as infinite or NaN. With the macro .BI fpclassify( x ) you can find out what type .I x is. The macro takes any floating-point expression as argument. The result is one of the following values: .TP .B FP_NAN .I x is "Not a Number". .TP .B FP_INFINITE .I x is either plus or minus infinity. .TP .B FP_ZERO .I x is zero. .TP .B FP_SUBNORMAL .I x is too small to be represented in normalized format. .TP .B FP_NORMAL if nothing of the above is correct then it must be a normal floating-point number. .LP The other macros provide a short answer to some standard questions. .TP .BI isfinite( x ) returns a non-zero value if .br (fpclassify(x) != FP_NAN && fpclassify(x) != FP_INFINITE) .TP .BI isnormal( x ) returns a non-zero value if (fpclassify(x) == FP_NORMAL) .TP .BI isnan( x ) returns a non-zero value if (fpclassify(x) == FP_NAN) .TP .BI isinf( x ) returns 1 if .I x is positive infinity, and \-1 if .I x is negative infinity. .SH "CONFORMING TO" C99 .SH NOTES In glibc 2.01 and earlier, .BR isinf () returns a non-zero value (actually: 1) if .I x is an infinity (positive or negative). (This is all that C99 requires.) .SH "SEE ALSO" .BR finite (3), .BR INFINITY (3), .BR isgreater (3)