Próbuję obliczyć wartość e, używając następującego kodu Java:

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);
    }
}

Jednakże, gdy wydrumieję e, liczba ogranicza się do 2.718281828459555 zamiast znacznie bardziej określonej liczby (2.718281828459555 x 10 ^ -308 lub coś podobnego). Czy to problem z typami, których używam?

0
James 15 październik 2020, 00:13

1 odpowiedź

Najlepsza odpowiedź

Z Ta odpowiedź:

Liczba miejsc dziesiętnych w podwójnym jest 16 .


Nie widzę, jak spodziewasz się uzyskać 2.7182818284590455 x 10^-308:

0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027182818284590455

To bardzo mała frakcja!

Co robisz, dodając coraz bardziej mniejszy frakcję do e. Na podstawie twojego kodu można oczekiwać tylko wyniku między 2.0 i 3.0.


To, co prawdopodobnie było , szukając precyzji więcej niż 16 miejsc dziesiętnych. Po prostu nie można osiągnąć przy użyciu double z powodu ograniczeń precyzyjnych.

1
Janez Kuhar 17 styczeń 2021, 15:12