2017-03-01 4 views
1

나는 BigDecimal을 사용하기 때문에 높은 십진수 정밀도가 필요하지만 Math.exp는 매개 변수를 double로 취하는 알고리즘입니다.Java에서 Math.exp 함수의 제한

값은 런타임시 생성 즉

BigDecimal mathEx = new BigDecimal(Math.exp(xMulXPoint5.doubleValue())); 
Where xMulXPoint5 = -347222407183165.419208175 

mathEx 결과 값 Math.exp하는 매개 변수로 전달 된 결과가 아닌 실제 작은 값의 0을 나타낸다 너무 작아서 진행된다.

누구든지이 문제를 해결하기 위해 다른 방법을 제안 할 수 있습니까?

+1

에도 볼프람 알파는이를 계산하지 않는 희망이 도움이 도움이 될 것입니다. 당신은 그것으로 무엇을 할 것인가? 그냥 로그로 표현하는 것이 좋습니까? 예를 들어, 이것을 정말로 큰 것으로 무언가를 배가 시키려고한다면, 둘 다의 로그를 추가하고 더 많은 수의 숫자를 얻을 수 있기를 바랍니다. – harold

답변

1

당신은 내가이 일을 발견하는 대신 Math.exp

, 그것은을 사용하여 다음의 BigDecimal을 사용하여 자신의 특급 기능을 정의 할 수 있습니다. 어쩌면이 스레드는

BigDecimal Euler's number calculation to emulate Math.exp(double a)

그것이

+0

링크가 부실화 될 수 있으므로 링크를 게시하는 것보다 자신의 설명과 예제 코드를 추가 할 수 있다면 더 좋을 것입니다. 따라서이 답변은 대부분 독자적으로 서술 할 수 있습니다. 링크를 게시하는 것은 참조 또는 추가 읽기로 좋습니다. – xlm

+0

결과가 지수를 언더 플로우하기 때문에 안타깝게도 그렇게하지 않을 것입니다 : 약 -1.5E14가 될 것이며, 32bit int (BigDecimal이 스케일에 사용하는)로 표현할 수 없습니다 – harold

+0

xlm 예, 우리가 획득해야 할 정밀도의 정도를주의해야합니다. 그것에 대해 상기시켜 주셔서 감사합니다. 해롤드 –

관련 문제