자바 펙토리얼 수열 계산

import java.util.Scanner;

public class Test {

public static void main(String [] args)
{
    double e = 0.0;
    double ins_sum = 0.0;
    int n = 0;
    int ins_fact = 1;
    Scanner sc = new Scanner(System.in);

    System.out.print("정수를 입력하시오 : ");
    n = sc.nextInt();

    for(int i = n; i>=1; i--) {
        for(int j = i; j>=1; j--) {
            ins_fact = ins_fact*j;
        }

        ins_sum = 1.0/ins_fact;
        e += ins_sum;
        ins_fact = 1;
        ins_sum = 0;
    }

    System.out.println("n이 "+n+"일 때 e의 값은 "+e+"이다.");
}

}

위 코드는 "1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + ..." 을 계산하기 위한 코드입니다

위 코드를 실행하고 10을 입력하면 맞는 정답이 나옵니다. 그런데 제가 찾아야 할 값은 n = 200 과 n = 10000 일 때의 경우인데 34이상의 수를 n에 대입하면 e의 값이 Infinity로 나옵니다...

33까지의 결과값은 일일히 계산기로 계산한 결과와 비교해보니 맞기에 코드 자체가 틀린 것 같지는 않은데...

해결할 수 있는 법이 있나요???

1답변

  • 참고만 하세요 +1 을 해야겠네요

    import java.math.BigDecimal;
    
    public class Test {
    
        public static void main(String [] args)
        {
            BigDecimal e = new BigDecimal("0.0");
            BigDecimal ins_sum = new BigDecimal("0.0");
            int n = 0;
            //long ins_fact = 1;
            BigDecimal ins_fact = new BigDecimal("1");
            //Scanner sc = new Scanner(System.in);
    
            //System.out.print("정수를 입력하시오 : ");
            n = 50;//sc.nextInt();
    
            for(int i = n; i>=1; i--) {
                for(int j = i; j>=1; j--) {
                    ins_fact = ins_fact.multiply(BigDecimal.valueOf(j));
                }
                System.out.println(ins_fact);
                ins_sum = BigDecimal.valueOf(1.0/ins_fact.doubleValue());
                e = e.add(ins_sum);
                ins_fact = new BigDecimal("1");
                ins_sum = new BigDecimal("0.0");
            }
    
            System.out.println("n이 "+n+"일 때 e의 값은 "+e+"이다.");
        }
    
    }
    
    n이 50일 때 e의 값은 1.718281828459045225790675731474643113446000753801893200897038675982544982489290584이다.
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.