axis() produces junk on DEC alpha (PR#274)

albrecht.gebhardt@uni-klu.ac.at albrecht.gebhardt@uni-klu.ac.at
Mon, 13 Sep 1999 10:57:22 +0200 (MET DST)


On Mon, 13 Sep 1999, Prof Brian D Ripley wrote:

> On Mon, 13 Sep 1999 albrecht.gebhardt@uni-klu.ac.at wrote:
> 
> > Full_Name: Albrecht Gebhardt
> > Version: 0.65.0
> > OS: Digital Unix 4.0E
> > Submission from: (NULL) (212.17.104.62)
> > 
> > 
> > Plottimg on the Alpha stopped working with 0.65.0.
> > 
> > The tickmarks have a length of -Inf and go across the whole 
> > plot.
> 
> I've seen the problem on Solaris when make decided to re-configure
> and so parts of R got compiled with different compiler options (as under
> re-configuration different environmental variables were set). But for me
> the problem seems to be getting NaN.

Yes it was NaN and not -Inf! Sorry

> 
> > A first solution is the following patch:
> > 
> > --- src/main/plot.c.alpha-patch Mon Sep 13 01:37:11 1999
> > +++ src/main/plot.c     Mon Sep 13 01:58:16 1999
> > @@ -832,7 +832,7 @@
> >         }
> >         dd->gp.col = fg;
> >         GLine(REAL(at)[0], y, REAL(at)[n - 1], y, USER, dd);
> > -       if (R_FINITE(dd->gp.tck)) {
> > +       if (R_FINITE(dd->gp.tck) && !(ISNAN(dd->gp.tck))) {
> >             /* The S way of doing ticks */
> >             double y0, y1;
> >             if (dd->gp.tck > 0.5) {
> 
> ....
> 
> 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!

> (Martin: I can't see this is checked in the tests explicitly. Should we add
> it?)  Note though that is.na tests ISNAN and is.nan tests R_IsNaN, but
> is.finite does test R_FINITE.
> 
> -- 
> 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
> 

-------------------------------------------------------------------------------
Albrecht Gebhardt                   email   : albrecht.gebhardt@uni-klu.ac.at
Institut fuer Mathematik            Tel.    : (++43 463) 2700/837
Universitaet Klagenfurt             Fax     : (++43 463) 2700/834
Villacher Str. 161
A-9020 Klagenfurt, Austria
-------------------------------------------------------------------------------



-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._