From ripley@stats.ox.ac.uk  Mon Sep 13 16:41:07 1999
From: ripley@stats.ox.ac.uk (ripley@stats.ox.ac.uk)
Date: Mon, 13 Sep 1999 17:41:07 +0200 (MET DST)
Subject: axis() produces junk on DEC alpha (PR#274)
Message-ID: <199909131541.RAA27086@pubhealth.ku.dk>


> Date: Mon, 13 Sep 1999 10:57:23 +0200 (MET DST)
> From: Albrecht Gebhardt <albrecht.gebhardt@uni-klu.ac.at>
> 
> On Mon, 13 Sep 1999, Prof Brian D Ripley wrote:

[...]

> > I'm puzzled.  Are you saying -Inf passes R_FINITE and passes ISNAN? (Wow!,
> > if so.) In any case, let us try and fix the macros (which crop up in many
> > places) not two instances.
> 
> NaN passed R_FINITE (see above). Then it gets multiplied by some values
> and serves as tickmark length.
> 
> > 
> > There are too many options in Arith.h to guess: can you please tell us
> > what path is being taken (HAVE_FINITE, IEEE_754, FINITE_BROKEN, ...).

> in src/include/Rconfig.h:
> /* Floating Point Arithmetic */
> /* #undef HAVE_MATHERR */               /* System V */
> #define HAVE_ISNAN 1            /* IEEE Arith indicator */
> #define HAVE_FINITE 1                                                           
>                                                                                 
> /* #undef HAVE_FLOATINGPOINT_H */                                               
> /* #undef HAVE_FPU_CONTROL_H */                                                 
> /* #undef HAVE_IEEEFP_H */              /* "-Wall" */                           
> /* #undef HAVE_IEEE754_H */             /* Linux */                             
>                                                                                 
> #ifdef HAVE_ISNAN                                                               
> #ifdef HAVE_FINITE                                                              
> #define IEEE_754                                                                
> #endif                                                                          
> #endif                                                                        
> 
> and some lines below:
> /* Bug Workarounds */
> /* #undef HAVE_OSF_SPRINTF_BUG */
> #define CALLOC_BROKEN 1
> #define FINITE_BROKEN 1                                                         
> #define LOG_BROKEN 1                                                            
> 
> 
> > 
> > I believe this can all be tested from interpreted R code. I believe you
> > should get  (is.na(c(2.0, Inf, -Inf, NaN, NA)) etc)
> >            2.0 Inf -Inf NaN NA
> > is.na       F   F    F   T   T
> > is.finite   T   F    F   F   F
> > is.infinite F   T    T   F   F
> > is.nan      F   F    F   T   F
> 
> 
> > is.na(c(2.0, Inf, -Inf, NaN, NA))                                             
> [1] FALSE FALSE FALSE  TRUE  TRUE                                               
> > is.finite(c(2.0, Inf, -Inf, NaN, NA))                                         
> [1] TRUE TRUE TRUE TRUE TRUE                                                    
> > is.infinite(c(2.0, Inf, -Inf, NaN, NA))                                       
> [1] FALSE FALSE FALSE FALSE FALSE                                               
> > is.nan(c(2.0, Inf, -Inf, NaN, NA))                                            
> [1] FALSE FALSE FALSE  TRUE FALSE          
> 
> Seems that everything is R_FINITE!

[...]

OK, so I think you are at the line

#   define R_FINITE(x)          ((x) != R_NaReal)

in Arith.h, and that is clearly inadequate (although it should have
caught the NA, I think). Can you please try replacing that line by

    static int R_FINITE(double x) {
        return !isnan(x) & (x != R_PosInf) & (x != R_NegInf); 
    }

and try those tests again.

(Kurt: looks like finite can be broken in more ways than one. I suggest
return(finite(1./0.) & finite(0./0.) & finite(-1./0.)) in aclocal.m4,
and if FINITE_BROKEN going directly to some function like the above, and not
trying to be efficient, just right!)


-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


axis() produces junk on DEC alpha (PR#274)
ripley@stats.ox.ac.uk