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