James
James

Reputation: 25

(Java) Why is my code not printing out the full number?

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

Answers (1)

Janez Kuhar
Janez Kuhar

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

Related Questions