[Developers] Re: [Aeidevelopment] CVS: "AEIDevelopment/ADMMass/src volume_integral.c"
jthorn at aei.mpg.de
Thu Oct 6 04:51:28 CDT 2005
[[how to get $\pi$ as a compile-time constant in C code]]
| Why not just use M_PI (defined by <math.h>, which you've already
| Are there systems whose <math.h> doesn't define M_PI?
On Thu, 6 Oct 2005, Frank Loeffler wrote:
> Concerning this, and probably an error of mine: Lately I tries to compile
> Cactus with gcc4.0.1, and the option std=c99. This resulted in an undefined
> M_PI, even if math.h was included. Do you know why?
I should have checked the FAQ. Quoting from
: Question 14.8
: The pre-#defined constant M_PI seems to be missing from my machine's copy
: of <math.h>.
: That constant (which is apparently supposed to be the value of pi, accurate
: to the machine's precision), is not standard. If you need pi, you'll have
: to #define it yourself.
: References: PCS Sec. 13 p. 237
The reference points to
Mark R. Horton, Portable C Software, Prentice Hall, 1990, ISBN 0-13-868050-7.
So apparently M_PI is just a "common extension", not part of the C
standard. So... gcc 4.* tries to be more standard-conforming, and
evidently in C99 mode it's trying to avoid tromping on the user namespace
with macros like M_PI.
There's always 4.0*atan(1.0).
-- Jonathan Thornburg <jthorn at aei.mpg.de>
Max-Planck-Institut fuer Gravitationsphysik (Albert-Einstein-Institut),
Golm, Germany, "Old Europe" http://www.aei.mpg.de/~jthorn/home.html
"Washing one's hands of the conflict between the powerful and the
powerless means to side with the powerful, not to be neutral."
-- quote by Freire / poster by Oxfam
More information about the Developers