Question about this java program

In summary, the conversation discusses a small Java program that approximates the number e using a series expression. The code is found to have several errors, including using the wrong series for e and using the exclusive or operator instead of exponentiation. The correct code is provided, using floating point numbers and the limit expression for e. The use of the Math.pow() function is deemed as "cheating" and the conversation ends with the suggestion to try writing a better exponent function.
  • #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.
 
Technology news on Phys.org
  • #2
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
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
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
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
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
D H said:
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 to Question about this java program

What is the purpose of this Java program?

The purpose of this Java program is to perform a specific task or solve a problem using the Java programming language.

What is the input for this Java program?

The input for this Java program can vary depending on the specific task or problem it is designed to solve. It could be user input, data from a file, or information retrieved from a database.

What is the output of this Java program?

The output of this Java program is the result of the task or problem it is designed to solve. It could be a calculated value, a message displayed to the user, or data stored in a file or database.

What is the logic behind this Java program?

The logic behind this Java program refers to the series of steps or instructions that are used to solve the problem or complete the task. This includes any conditional statements, loops, or algorithms used in the program.

Can I modify or customize this Java program?

Yes, this Java program can be modified or customized to fit specific needs or requirements. Depending on the complexity of the program, this may require a good understanding of the Java language and programming concepts.

Similar threads

  • Programming and Computer Science
Replies
8
Views
1K
  • Programming and Computer Science
Replies
8
Views
1K
  • Programming and Computer Science
Replies
3
Views
809
  • Programming and Computer Science
Replies
2
Views
1K
  • Programming and Computer Science
Replies
2
Views
722
  • Programming and Computer Science
Replies
5
Views
1K
  • Programming and Computer Science
Replies
1
Views
806
  • Programming and Computer Science
Replies
3
Views
2K
  • Programming and Computer Science
Replies
14
Views
3K
  • Programming and Computer Science
Replies
1
Views
6K
Back
Top