Hamish wrote:

> when I try to compile a fresh check out of 6.4.3svn on an older
> system (glibc 2.3.6) I get this error from v.in.ogr:
> 
> main.c: In function 'main':
> main.c:1208: error: implicit declaration of function 'log2'
> main.c:1208: warning: incompatible implicit declaration of built-in function 
> 'log2'
> 
> 
> I thought it was because #include <math.h> was missing (for pow()
> and log10() too), but after adding that I still get the error.
> 
> It turns out I need to add -std=c99 to the gcc line to get it
> to work, but the glibc man page for log2() has it conforming to
> SVr4, 4.3BSD, C89.

Huh? On my system, the log2 manual page says:

        CONFORMING TO
               C99, POSIX.1-2001. The variant returning double also conforms
               to SVr4, 4.3BSD.

> maybe I could replace it with a log()/log() trick, but would
> pow() and log10() also be broken?

pow() and log10() are C89. As is exp2(), FWIW.

But if you're planning on replacing this:

        new_snap = log2(xmax) - 52;
        new_snap = pow(2, new_snap);

I'd suggest using:

        int exp;
        new_snap = frexp(xmax, &exp);
        exp -= 52;
        new_snap = ldexp(new_snap, exp);

frexp() and ldexp() are C89, don't introduce rounding errors, and
handle zero correctly (they're also likely to be more efficient, but
that's a trivial detail).

-- 
Glynn Clements <[email protected]>
_______________________________________________
grass-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/grass-dev

Reply via email to