IEEE_754 logic

Kurt Hornik
Mon, 18 Oct 1999 10:08:14 +0200 (CEST)

>>>>> Peter Dalgaard BSA writes:

> Thomas Hoffmann <> writes:
>> Can anybody of the architects of R enlighten me about the reasoning behind the selection of the IEEE 754 
>> mode for the building of R, please?
>> Special points of interest are:
>> 1. The selection seems to be based on the availability of isnan() and finite(). Is this a common way 
>> to test for IEEE 754?
>> 2. The C9x draft introduces isfinite() instead of finite() (and as I see, some systems, e.g. the 
>> macintosh, use this naming already). This is a deviation from the old ieee754 C mapping. I do not 
>> know, where we are in this transformation process now (most compilers seem to use finite(), still).
>> 3. The C9x draft introduces the is*() functionality under the name of "classification MACROS". If an 
>> implementation implements this standard, autoconf misses isnan() and isfinite().

> Thanks for your comments. If you have suggestions for a safer way of
> detecting the functionality in a platform-dependent way, we'd be happy
> to know about it. However, one has to be careful; e.g., Solaris has
> only finite() and no isfinite(), linux has both. There seems to be
> almost no consistency in how different systems signal the precence of
> IEEE compatibility. 

> The heuristics in autoconf are more or less lifted  off of other
> packages like Octave (right, Kurt?) and are by no means failsafe.

Not quite.  I don't think Octave worries about isfinite() at all.  We
check for finite() as a library function in autoconf.  In addition, we
do the following in `Arith.h':

#include <math.h>
#ifdef Macintosh
# define finite(x)      isfinite(x)
# ifndef HAVE_FINITE
#  ifndef finite                /* Do not declare if macro! */
#   ifdef isfinite              /* HPUX math.h */
#     define finite(x)  isfinite(x)
#   else
      int finite(double);
#   endif
#  endif
# endif

which seems to give what we want, no?

r-devel mailing list -- Read
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: