syntax for e (natural logs)

S

Senturon

I was wondering what, if there is even one, the syntax for the constant e
is. I figured it would be in math.h right alongside 'pi' but it doesn't
seem to be there, does it in fact exist? i did many searches online but it
is hard to search for the letter 'e', even tried natural logs but came up
dry. Any help would be appreciated, thank you!

~Senturon
 
O

osmium

Senturon said:
I was wondering what, if there is even one, the syntax for the constant e
is. I figured it would be in math.h right alongside 'pi' but it doesn't
seem to be there, does it in fact exist? i did many searches online but it
is hard to search for the letter 'e', even tried natural logs but came up
dry. Any help would be appreciated, thank you!

exp(1.0)
should work. It's in <math.h>.
 
D

Derrick Coetzee

Senturon said:
I was wondering what, if there is even one, the syntax for the constant e
is. I figured it would be in math.h right alongside 'pi' but it doesn't
seem to be there, does it in fact exist? i did many searches online but it
is hard to search for the letter 'e', even tried natural logs but came up
dry. Any help would be appreciated, thank you!

In fact neither definitions of pi nor e are required by the C90
standard. The only macro math.h always defines is HUGE_VAL. However,
math.h does supply some functions which you can use to obtain these
constants at runtime.

For pi: acos(-1.0)
For e: exp(1.0)

Alternatively, if you'd rather have them at compile-time, just stick the
constants in yourself:

#define PI (3.1415926535897932384626433832795028841971693994L)
#define E (2.7182818284590452353602874713526624977572470937L)
 
M

Martin Ambuhl

Senturon said:
I was wondering what, if there is even one, the syntax for the constant e
is. I figured it would be in math.h right alongside 'pi'

Pi isn't in said:
but it doesn't
seem to be there, does it in fact exist? i did many searches online but it
is hard to search for the letter 'e', even tried natural logs but came up
dry. Any help would be appreciated, thank you!

Put into your code:

const double pi=3.14159265358979324;
const double e= 2.71828182845904524;

you could, of course, perversely use
#define PI (4*atan(1))
or
#define PI (6*atan(1/sqrt(3)))

along with
#define E (exp(1))
 
K

Keith Thompson

Martin Ambuhl said:
Put into your code:

const double pi=3.14159265358979324;
const double e= 2.71828182845904524;

Which is ok unless you need precise values in type long double and/or
in a type with a mantissa of more than about 58 bits.
you could, of course, perversely use
#define PI (4*atan(1))
or
#define PI (6*atan(1/sqrt(3)))

along with
#define E (exp(1))

That actually makes sense if you assign it to a constant rather than
using a macro that potentially causes the values to be recomputed each
time you use it.
 
M

Merrill & Michele

snip
Alternatively, if you'd rather have them at compile-time, just stick the
constants in yourself:

#define PI (3.1415926535897932384626433832795028841971693994L)
#define E (2.7182818284590452353602874713526624977572470937L)

Why the terminal L? MPJ
 
D

Dag Viken

Senturon said:
I was wondering what, if there is even one, the syntax for the constant e
is. I figured it would be in math.h right alongside 'pi' but it doesn't
seem to be there, does it in fact exist? i did many searches online but it
is hard to search for the letter 'e', even tried natural logs but came up
dry. Any help would be appreciated, thank you!

~Senturon

AFAIK, there is no C standard for common math constants but most Unix
implementations have them in <math.h>, all with a prefix of "M_". Microsoft
did not include these constants until VC7 and then only if you define the
symbol _USE_MATH_DEFINES as demonstrated below.

The constant for e is: M_E

Dag


From VC7 math.h:

#ifdef _USE_MATH_DEFINES

/* Define _USE_MATH_DEFINES before including math.h to expose these macro
* definitions for common math constants. These are placed under an #ifdef
* since these commonly-defined names are not part of the C/C++ standards.
*/

/* Definitions of useful mathematical constants
* M_E - e
* M_LOG2E - log2(e)
* M_LOG10E - log10(e)
* M_LN2 - ln(2)
* M_LN10 - ln(10)
* M_PI - pi
* M_PI_2 - pi/2
* M_PI_4 - pi/4
* M_1_PI - 1/pi
* M_2_PI - 2/pi
* M_2_SQRTPI - 2/sqrt(pi)
* M_SQRT2 - sqrt(2)
* M_SQRT1_2 - 1/sqrt(2)
*/

#define M_E 2.71828182845904523536
#define M_LOG2E 1.44269504088896340736
#define M_LOG10E 0.434294481903251827651
#define M_LN2 0.693147180559945309417
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.785398163397448309616
#define M_1_PI 0.318309886183790671538
#define M_2_PI 0.636619772367581343076
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2 1.41421356237309504880
#define M_SQRT1_2 0.707106781186547524401

#endif /* _USE_MATH_DEFINES */
 
M

Michael Mair

#define PI (3.1415926535897932384626433832795028841971693994L)
Why the terminal L? MPJ

To make them long double constants; without F or L, floating
point constants are assumed to be double constants, so you
would lose all the excess digits of precision between double
and long double without the L.
 
L

lawrence.jones

Senturon said:
I was wondering what, if there is even one, the syntax for the constant e
is.

Some implementations define the macro M_E when not in strict ANSI C
mode. For true portability, you can use exp(1.0).

-Larry Jones

I kind of resent the manufacturer's implicit assumption
that this would amuse me. -- Calvin
 
T

Tim Prince

Dag Viken said:
AFAIK, there is no C standard for common math constants but most Unix
implementations have them in <math.h>, all with a prefix of "M_".

Make that "most Posix implementations." It's been mentioned several times
that the C standard doesn't permit these constants to appear by a default
invocation of <math.h>. As you pointed out, the compilers vary in the
scheme employed to make them appear, and in whether they are defined so as
to make them work in long double as well as double. As Microsoft doesn't
support long double as distinct from double, their omission in that
department may not be surprising.
 
K

Keith Thompson

Tim Prince said:
Make that "most Posix implementations." It's been mentioned several times
that the C standard doesn't permit these constants to appear by a default
invocation of <math.h>. As you pointed out, the compilers vary in the
scheme employed to make them appear, and in whether they are defined so as
to make them work in long double as well as double. As Microsoft doesn't
support long double as distinct from double, their omission in that
department may not be surprising.

If Microsoft doesn't support type "long double" at all, their compiler
is not conforming. If they support "long double" with the same
representation as "double", that's perfectly legitimate, as long as
both types satisfy the minimum requirements.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top