Question about this java program

  • Java
  • Thread starter vsingh165
  • Start date
  • #1
vsingh165
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.
 

Answers and Replies

  • #2
George Jones
Staff Emeritus
Science Advisor
Gold Member
7,461
1,150
You're using the wrong series for e.

Your series:

[tex]e = \left(1 + \frac{1}{1} \right)^1 + \left(1 + \frac{1}{2} \right)^2 + \left(1 + \frac{1}{3} \right)^3 + ...[/tex]

Correct series:
[tex]e = 1 +\frac{1}{1!} + \frac{1}{2!} + \frac{1}{3!} + ...[/tex]

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

Also, you might want to sum the series "backwards".
 
  • #3
230
0
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.
 
  • #4
D H
Staff Emeritus
Science Advisor
Insights Author
15,415
687
There are many things wrong with this.
  • the expression for e is

    [tex]e=\lim_{x\to\infty}(1+1/x)^x[/tex]

    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

    [tex]\text{current\_e} = \sum_{x=1}^{N-1} x[/tex]

    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.
 
  • #5
vsingh165
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:
  • #6
D H
Staff Emeritus
Science Advisor
Insights Author
15,415
687
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 [itex]a^b[/itex] via the relation [itex]a^b = \exp(b\log a)[/itex].
 
  • #7
vsingh165
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 [itex]a^b[/itex] via the relation [itex]a^b = \exp(b\log a)[/itex].

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:

Related Threads on Question about this java program

  • Last Post
Replies
4
Views
1K
  • Last Post
Replies
11
Views
86K
  • Last Post
2
Replies
28
Views
2K
Replies
2
Views
6K
  • Last Post
Replies
18
Views
6K
  • Last Post
Replies
7
Views
19K
Replies
6
Views
691
Replies
2
Views
4K
Replies
6
Views
7K
Top