2016-12-19 3 views
0

임의로 긴 10 진수로 숫자를 계산하고 싶습니다. (특정 숫자에 대해 10 진수를 취하고 싶다고 가정). Java에서 BigDecimal (또는 다른 클래스)을 사용하여 훨씬 더 높은 정밀도 얻기

//Take the square root of 2 for 100 digits in total. 
public class Main { 
    public static void main(String[] args) { 
     BigDecimal root2 = new BigDecimal(Math.pow(2, 0.5)); 
     root2 = root2.setScale(99, BigDecimal.ROUND_HALF_UP); 
     System.out.println(root2); 
    } 
} 

그리고이 프로그램 출력 :

1.414213562373095145474621858738828450441360473632812500000000000000000000000000000000000000000000000 

바이트의 저장에 초보자 배경을 갖는, 여기 문제가 출력 형식, 또는 난 아직받지 못했습니다 사실 중 하나입니다 실현 내가 기대하고있는 메모리를 사용하지 않기 때문에 찾고있는 정밀도. 어떤 제안? 이 정밀도를 높일 수 있습니까? 저는 Mathematica에 관심을 기울이지 않습니다.

명확화를 위해 : 나는 100 자리의 전체 정밀도를 얻으려고합니다. (0은 여기에 속하지 않습니다).

+0

현재 100 자리가 있습니다. 몇 명이나 드시겠습니까? –

+1

길이가 잘못되었다는 것은 아닙니다.'sqrt (2)'는 비합리적이며 그와 같은 후미가 없어야합니다. 내가 찾는 전체 수는 저장하지 않습니다. –

+0

가능한 답은 http://stackoverflow.com/questions/13649703/square-root-of-bigdecimal-in-java를 참조하십시오. – bithead61

답변

4

당신이하고있는 일이 왜 효과가 없는지에 대한 설명입니다.

Math.pow()double을 반환합니다. 따라서 귀하의 코드는 double로 제공된 정밀도를 사용하여 값을 계산하고 그 double에서 BigDecimal을 생성합니다. 큰 십진수에 정밀도를 설정하기에는 너무 늦습니다. 입력 값이 두 배 밖에되지 않기 때문입니다.

따라서 Math.pow()을 사용할 수 없습니다. 대신 임의 정밀도 계산을 수행하는 다른 라이브러리를 찾아야합니다.

자세한 내용은 Java's BigDecimal.power(BigDecimal exponent): Is there a Java library that does it?