Reputation: 25
I'm trying to calculate the value of e using the following Java code:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
int n;
System.out.print("number of values: ");
n = scnr.nextInt();
double e = 0.0;
double f = 1.0;
for (int i = 1; i <= n; i++) {
f = f * (i);
e += 1 / f;
}
e += 1;
System.out.print(e);
}
}
However, when I print out e, the number it limited to 2.7182818284590455 instead of a much more specific number (2.7182818284590455 x 10^-308 or something similar). Is it a problem with the Types I'm using?
Upvotes: 0
Views: 233
Reputation: 4266
From this answer:
The number of decimal places in a double is 16.
I can't see how you expect to get 2.7182818284590455 x 10^-308
:
0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027182818284590455
That's a very small fraction!
What you're doing is adding an increasingly smaller fraction to e
. Based on your code, you can only expect the result to be between 2.0
and 3.0
.
What you probably were looking for was a precision of more than 16 decimal places. That simply can't be achieved using double
due to precision limitations.
Upvotes: 1