On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com

How To Guides
Virtualization
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions

#### 20.8.6 Floating-Point Comparison Functions

The standard C comparison operators provoke exceptions when one or other of the operands is NaN. For example,

```     int v = a < 1.0;
```

will raise an exception if a is NaN. (This does not happen with `==` and `!=`; those merely return false and true, respectively, when NaN is examined.) Frequently this exception is undesirable. ISO C99 therefore defines comparison functions that do not raise exceptions when NaN is examined. All of the functions are implemented as macros which allow their arguments to be of any floating-point type. The macros are guaranteed to evaluate their arguments only once.

— Macro: int isgreater (real-floating x, real-floating y)

This macro determines whether the argument x is greater than y. It is equivalent to `(`x`) > (`y`)`, but no exception is raised if x or y are NaN.

— Macro: int isgreaterequal (real-floating x, real-floating y)

This macro determines whether the argument x is greater than or equal to y. It is equivalent to `(`x`) >= (`y`)`, but no exception is raised if x or y are NaN.

— Macro: int isless (real-floating x, real-floating y)

This macro determines whether the argument x is less than y. It is equivalent to `(`x`) < (`y`)`, but no exception is raised if x or y are NaN.

— Macro: int islessequal (real-floating x, real-floating y)

This macro determines whether the argument x is less than or equal to y. It is equivalent to `(`x`) <= (`y`)`, but no exception is raised if x or y are NaN.

— Macro: int islessgreater (real-floating x, real-floating y)

This macro determines whether the argument x is less or greater than y. It is equivalent to `(`x`) < (`y```) || (```x`) > (`y`)` (although it only evaluates x and y once), but no exception is raised if x or y are NaN.

This macro is not equivalent to x` != `y, because that expression is true if x or y are NaN.

— Macro: int isunordered (real-floating x, real-floating y)

This macro determines whether its arguments are unordered. In other words, it is true if x or y are NaN, and false otherwise.

Not all machines provide hardware support for these operations. On machines that don't, the macros can be very slow. Therefore, you should not use these functions when NaN is not a concern.

Note: There are no macros `isequal` or `isunequal`. They are unnecessary, because the `==` and `!=` operators do not throw an exception if one or both of the operands are NaN.

 Published under the terms of the GNU General Public License Design by Interspire