2012-10-28 2 views
4

BigIntegerdouble (number2)으로 저장된 매우 큰 숫자 (number1)가 있습니다. number1number2을 곱하여 결과를 double로 저장할 계획입니다.Java에서 Double에 의해 BigInteger를 다중화 할 수 있습니까?

multiply() 방법을 사용하면이 문제를 해결하지 못했습니다. 앞으로 나아갈 길은 무엇입니까?

+3

귀하의 질문에 중요한 정보가 부족합니다. 첫째, "나를 도왔다"는 의미는 무엇입니까? –

+2

* "number1과 number2를 곱해서 결과를 double로 저장할 계획입니다."* 왜? 증명되지 않은 수학적 원리를 해독하려합니까? –

답변

7

가장 간단한 해결책은 아마도 big.doubleValue() * myDouble 일 것입니다.

BigInteger.doubleValue()은 특히 느린 구현이므로이 속도가 특히 빠르지는 않습니다. 당신은 Guava'sDoubleMath.roundToBigInteger(double, RoundingMode)를 사용하여 BigInteger에 직접 double 반올림 할 수

다른 방법 (그것은 오라클 내를 patch. 적용 아마도 경우 ... 빠른 미래에있을 수 있습니다).

+0

'doubleValue()'를 사용했습니다. Javadoc에 따르면이 메서드는 BigInteger를 double로 반환합니다. 그러나이 사건은 어떻게 되는가? BigInteger의 값은 너무 커서 어떻게 double의 범위에 들어갈 수 있습니까? – jesterII

+1

Doubles는 올바르게 기억하면 2^1024 또는 2 * 10^308까지 값을 유지할 수 있습니다. 하지만 그 값을 저장하는 데는 _precision_이 제한적입니다. –

+0

dasblinkenlight의'BigDecimal' 대답은이 답변보다 훨씬 낫습니다. 손실이 없기 때문에 정확도는 –

1

BigInteger에서 .doubleValue()을 호출하고 두 배로 곱하십시오.

1

BigInteger#multiply()이 도움이되지 않는 이유는 무엇입니까? 두 합리적인 대답은 정말 있습니다

과 같이 double에 결과를 변환 한 후, 가능한 한 오랫동안 임의의 정밀도를 유지 BigDecimal에 곱셈을 수행하고하기 위해
BigInteger a = /* whatever */; 
double b = /* whatever */ 

// either 
double result = a.multiply(new BigInteger(b)).doubleValue(); 
// or 
double result = a.doubleValue() * b; 
+0

* "합리적인 답변이 두 개 있습니다."* - 다른 합리적인 답변과는 별도로 :-) –

13

:

BigDecimal tmp = new BigDecimal(myBigInteger); 
tmp = tmp.multiply(new BigDecimal(myDouble)); 
double res = tmp.doubleValue(); 
관련 문제