2017-03-01 6 views
1

私は実装で、BigDecimalを使用しているので高精度が要求されていましたが、Math.expではパラメータがdoubleにしかなりませんでした。JavaでのMath.exp関数の制限

値は、実行時に生成され、すなわち

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

mathEx結果値をMath.expのためのパラメータとして渡された結果ではなく、実際の小さな値のゼロを示すように、小さな移行されます。

誰でもこの問題を解決する他の方法を提案できますか?

+1

を役に立てば幸いに役立つこれを計算する必要はありません。あなたはそれで何をするつもりですか?ログで表現するだけでいいですか?例えば、これに本当に大きなものを掛けようとするなら、両方のログを追加して、うまくいけば実行可能な番号を得ることができます。 – harold

答えて

1

あなたは、私はこの1つを発見した代わりに、Math.expの

の、それを使用して、BigDecimalのを使用して、独自のEXP関数を定義することができます。たぶん、このスレッドが

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

はそれもウルフラムアルファ

+0

リンクが陳腐化するなど、リンクを投稿するよりも自分の説明やサンプルコードを追加できればよいでしょう。リンクを投稿することは参考資料または追加の読書としては問題ありません。 – xlm

+0

残念ながら、結果は指数をアンダーフローするので、それはしません。約-1.5E14で、32ビットint(BigDecimalはそのスケールで使用します)で表現できません。 – harold

+0

アドバイス、xlm はい、私は、取得する必要がある精度の数に注意を払う必要があることに同意します。それを思い出してくれてありがとう。ハロー –