Boost logo

Boost :

From: Johan Råde (rade_at_[hidden])
Date: 2006-10-05 07:42:33


I have put together optimized implementations
of the following functions:

   template<class T> int fpclassify(T x);
   template<class T> bool isfinite(T x);
   template<class T> bool isinf(T x);
   template<class T> bool isnan(T x);
   template<class T> bool isnormal(T x);
   template<class T> bool signbit(T x);
   template<class T> T copysign(T x, T y);
   template<class T> T changesign(T x);

Here T is required to be float, double or long double.

--------------------

The code has been tested with

Windows / VC7.1 / i386
Mac / GCC 4.0 / powerpc
Linux / GCC 3.3 / i386, amd64, ia64, powerpc, mips, hppa

The code should work with most platforms
that support the IEEE754 standard.

--------------------

Many of these functions have also been
implemented by John Maddock.
The difference is that my implementation
is optimized for speed.

Here are some timing numbers on VC 7.1:

   float Råde Maddock Native

   fpclassify 8 57 -
   isfinite 5 57 -
   isnormal 6 59 -
   isinf 5 57 -
   isnan 6 57 -

   double Råde Maddock Native

   fpclassify 13 52 29
   isfinite 11 56 17
   isnormal 14 56 -
   isinf 10 52 -
   isnan 4 52 19

The times are in clock cycles for a single call,
based on an average of 10,000,000 calls
with random input.

--------------------

The code is available in the vault,
at "Home/Math - Numerics/fpclassify.zip".

Many thanks to Håkan Ardö who tested the code on Linux
and Olivier Verdie who tested the code on Mac.

--Johan Råde


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk