자바 펙토리얼 수열 계산


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까지의 결과값은 일일히 계산기로 계산한 결과와 비교해보니 맞기에 코드 자체가 틀린 것 같지는 않은데...

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

  • 2017년 10월 10일에 작성됨

조회수 99


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이다.
  • 2017년 10월 10일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close