【问题标题】:Limitation of Math.exp Function in JavaJava 中 Math.exp 函数的局限性
【发布时间】:2017-03-01 10:15:06
【问题描述】:

我正在实现一个算法,其中我需要高十进制精度,所以我使用 BigDecimal 但 Math.exp 只接受双精度参数。

值在运行时生成并作为参数传递给 Math.exp 即

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

mathEx 结果值太小以至于结果显示为零而不是实际的小值。

任何人都可以建议任何其他方法来解决这个问题。

【问题讨论】:

  • 即使是 wolfram alpha 也不想计算这个。你打算用它做什么,只用它的日志来表示它可以吗?例如,如果您要将它乘以一个非常大的值,那么您可以将两者的对数相加,并希望得到一个更可行的数字。

标签: java double precision bigdecimal exponent


【解决方案1】:

您可以使用 BigDecimal 定义自己的 exp 函数,然后使用它,而不是 Math.exp

我找到了这个。也许这个帖子会有所帮助

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

希望对你有帮助

【讨论】:

  • 如果您可以添加自己的解释和/或示例代码会更好,而不是仅仅发布链接,因为链接可能会变得陈旧等,因此这个答案可以在很大程度上独立存在。发布链接可以作为参考或补充阅读。
  • 不幸的是,它不会这样做,因为结果下溢指数:它大约是 -1.5E14,不能用 32 位 int 表示(BigDecimal 使用它来表示它的规模)
  • 感谢您的建议,xlm 是的,我同意我们需要注意我们需要获得多少精度。谢谢你提醒。哈罗德
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2023-01-11
  • 2012-08-18
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多