Skip to content

Unneeded if statements in RealFromComplex C code

3 messages · Hervé Pagès, Martin Maechler

#
Hi,

I just stumbled across these 2 lines in RealFromComplex (lines 208 & 209 
in src/main/coerce.c):

   double attribute_hidden

   RealFromComplex(Rcomplex x, int *warn)

   {

       if (ISNAN(x.r) || ISNAN(x.i))

           return NA_REAL;

       if (ISNAN(x.r)) return x.r;
               <- line 208
       if (ISNAN(x.i)) return NA_REAL;
           <- line 209
       if (x.i != 0)

           *warn |= WARN_IMAG;

       return x.r;

   }


They were added in 2015 (revision 69410).

They don't serve any purpose and might slow things down a little (unless 
compiler optimization is able to ignore them). In any case they should 
probably be removed.

Cheers,
H.
#
> Hi,

    > I just stumbled across these 2 lines in RealFromComplex (lines 208 & 209 
    > in src/main/coerce.c):

    > double attribute_hidden
    > RealFromComplex(Rcomplex x, int *warn)
    > {
    >   if (ISNAN(x.r) || ISNAN(x.i))
    >       return NA_REAL;
    >   if (ISNAN(x.r)) return x.r;        <- line 208
    >   if (ISNAN(x.i)) return NA_REAL;    <- line 209
    >   if (x.i != 0)
    >      *warn |= WARN_IMAG;
    >   return x.r;
    > }

    > They were added in 2015 (revision 69410).

by me.  "Of course" the intent at the time was to  *replace* the
previous 2 lines and return NA/NaN of the "exact same kind"....

but in the mean time, I have learned that trying to preserve
exact *kinds* of NaN / NA is typically not platform portable,
anyway because compiler/library optimizations and
implementations are pretty "free to do what they want" with these.

    > They don't serve any purpose and might slow things down a little (unless 
    > compiler optimization is able to ignore them). In any case they should 
    > probably be removed.

I've cleaned up now, indeed back compatibly, i.e., removing both
lines as you suggested.

Thank you, Herv?!

Martin


    > Cheers,
    > H.

    > -- 
    > Herv? Pag?s

    > Bioconductor Core Team
    > hpages.on.github at gmail.com
#
Thanks Martin!

Best,
H.
On 10/09/2021 02:24, Martin Maechler wrote: