• Java
OK here is my source code for a small Java program I wrote to approximate the number e:

Code:
import java.util.Scanner;

public class E
{
public static void main (String[] args)
{
double e = 0.00, current_e = 0.00;
int x, number_of_digits;
Scanner scan = new Scanner (System.in);

System.out.println("How many digits?");
number_of_digits = scan.nextInt();

for (x=1; x<number_of_digits; x++)
{
current_e = (1 + (1/x)) ^ x;
e += current_e;
}

System.out.println("e = " + e);
}
}

What's wrong with this code? When I run this program and enter 100000 for number_of_digits, I get a result of e = 4.999950002E9. What's up with this?

P.S.: This is the latest Java SDK (1.6) I am compiling this program in.

Staff Emeritus
Gold Member
You're using the wrong series for e.

$$e = \left(1 + \frac{1}{1} \right)^1 + \left(1 + \frac{1}{2} \right)^2 + \left(1 + \frac{1}{3} \right)^3 + ...$$

Correct series:
$$e = 1 +\frac{1}{1!} + \frac{1}{2!} + \frac{1}{3!} + ...$$

You've used the limit expression for e instead of the series expression for e.

Also, you might want to sum the series "backwards".

las3rjock
At x = 1, your code sets e = (1 + 1)^1 = 2. At x = 2, your code sets e = 2 + (1.5)^2 = 2 + 2.25 = 4.25. At x = 3, your code sets e = 4.25 + (4/3)^3 ~= 6.6. I leave it as an exercise for you to figure out what's going (seriously) wrong here.

Staff Emeritus
There are many things wrong with this.
• the expression for e is

$$e=\lim_{x\to\infty}(1+1/x)^x$$

You are computing the sum, not the limit.
• You declared x as an integer. For all x but x=1, 1/x is zero.
• You are using ^ for exponentiation. In Java, ^ represents the exclusive or operator. For x=1, 1+1/x evaluates to 2 and (1+1/x)^x is 3. For all other x, 1+1/x is just 1 =x. If x is even, 1^x is x+1. If x is odd, 1^x is x-1. Those plus and minus ones more or less cancel leaving just

$$\text{current\_e} = \sum_{x=1}^{N-1} x$$

which is just N(N-1)/2. With N= 100000, this becomes 50000*99999=4.99995e9.

Use the right formula and use floating point numbers rather than integers where you need floating point numbers.

Oh, OK I see what all of you are trying to say. I am adding each approximation of e for each integer x which means my sum is going to be huge...so what I did was I took out the loop completely and just plugged in the number the user enters for x.

Code:
import java.util.Scanner;
import java.lang.Math;

public class E
{
public static void main (String[] args)
{
double e = 0.00, x;
Scanner scan = new Scanner (System.in);

System.out.println("Please enter a positive integer or decimal number:");
x = scan.nextDouble();

e = Math.pow((1+(1/x)), x);

System.out.println("e = " + e);
}
}

And this is what happens when I enter 1 million for x:

Code:
ken@ken-laptop:~/java\$ java E
Please enter a positive integer or decimal number:
1000000
e = 2.7182804690957534

Ta da!

Last edited by a moderator:
Staff Emeritus
Ta da!

Were you supposed to use a series or the limit expression? Using math.pow() is "cheating" in a sense, as this function evaluates $a^b$ via the relation $a^b = \exp(b\log a)$.

Ta da!

Were you supposed to use a series or the limit expression? Using math.pow() is "cheating" in a sense, as this function evaluates $a^b$ via the relation $a^b = \exp(b\log a)$.

To make this way easier I used the limit expression (no looping required) instead of the series expression.

Yeah, I see your point about the Math.pow() function in Java. Maybe if I have more time I'll try writing a better exponent function. I just started learning this language and I have to say it is pretty interesting.

Last edited by a moderator: