2017-03-01 42 views
1

我正在實現一種算法,其中我需要很高的小數精度,因此我使用的是BigDecimal,但Math.exp只需要double參數。Java中的Math.exp函數的侷限性

值在運行時產生和作爲參數傳遞給Math.exp 即

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

mathEx結果值變爲如此之小,結果顯示零,而不是實際的小的值。

任何人都可以請建議任何其他方式來解決這個問題。

+1

即使Wolfram Alpha的想不計算此。你打算怎麼處理它,只用它的日誌來代表它可以嗎?例如,如果你要將這個乘以一個非常大的值,那麼你可以添加兩者的日誌,並希望得到一個更可行的數字。 – harold

回答

1

可以使用BigDecimal的,然後用它定義自己的EXP函數,而不是Math.exp

我發現這一個。也許這線程將幫助

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

希望它可以幫助

+0

如果您可以添加自己的解釋和示例代碼,而不僅僅是發佈鏈接,因爲鏈接可能會變得陳舊等,那麼這樣做會更好,因此此答案可以在很大程度上獨立。作爲參考或附加閱讀,發佈鏈接很不錯。 – xlm

+0

不幸的是,不會這樣做,因爲結果下溢指數:它將大約爲-1.5E14,它不能用32位int表示(BigDecimal使用它的比例) – harold

+0

感謝您的建議,xlm 是的,我同意我們需要注意我們需要獲得多少精度。感謝提醒。哈羅德 –