2014-05-09 1 views
3

큰 숫자 나 작은 숫자가 포함 된 계산을 만들어 매우 크거나 작은 숫자가됩니다.Java에서 너무 큰 수와 너무 적은 수에 대해 매우 높은 정밀도를 얻으려면 어떻게해야합니까?

지금 내가 신경 쓰는 건 일을 가능한 정확하게 수행하는 방법입니다..

내가 구글 계산기이 계산을하려고하면 1000^10 = 1E + 내가 BigDecimal을 사용하여 동일한 계산을하려고 할 때, 나는 다른 결과를 얻었다

1000000000000000000000000000000로 읽을 수 30 !

BigDecimal bigNumber = new BigDecimal(Math.pow(1000, 10)); 
    System.out.println(bigNumber); 

1000000000000000019,884,624,838,656

나는 그것이 과학적 표기법을 사용하지 않고 나에게 숫자의 전체 범위를 제공하지만 마지막에 몇 가지 여분의 쓰레기 번호를 제공하는 것이 행복

.

BigDecimal에 국한되지 않음에 유의하십시오. 나는 어쨌든 정밀도에 관심이 있습니다.

그래서 Java에서 너무 큰 수와 너무 적은 수에 대해 매우 높은 정밀도를 얻으려면 어떻게해야합니까?

+7

당신은하지 않았다 '사용하여 동일한 계산을 시도'BigDecimal.'는'당신은 부동 소수점에서 같은 계산을했고, * 다음 * * 표시 결과를 변환 *에 BigDecimal입니다. – EJP

+0

BigDecimal을 사용해야합니다. 'double'에서 계산을하고 BigDecimal로 변환해도 마술처럼 정확하지 않습니다. –

답변

9

BigDecimal을 사용하고 double에서 계산하는 것은 BigDecimal을 전혀 사용하지 않는 것과 같습니다.

사용 BigDecimal가 계산을 할 :

BigDecimal bigNumber = new BigDecimal(1000).pow(10); 
System.out.println(bigNumber);