在这里提问,如果你能提供帮助,我们将不胜感激。
我正在尝试使用我用于双值的代码行计算bigdecimal的sigmoid值
double a = 1 / (1 + Math.exp("a"));
但是我想对bigdecimal数据类型执行相同的操作,但我找不到为bigdecimal执行此操作的代码
Math.exp(x)
是否有任何短代码可以在bigdecimal上提供此sigmoid值
提前致谢
答案 0 :(得分:2)
查看使用BigDecimalUtils.exp()的贝叶斯MCMC Taylor's formula。
BigDecimal exponential = BigDecimalUtils.exp(BigDecimal.valueOf(3.2), 4);
答案 1 :(得分:0)
您可以使用Taylor / Maclaurin系列扩展近似指数函数Math.exp(x)
:
exp(x) = sum_n=0^infinity x^n / (n!)
等于:
exp(x) = 1 + x + (x^2)/2! + (x^3)/3! + (x^4)/4! + ...
虽然这是无限多个术语的总和,但您可以在前几个术语之后停止以获得近似解,尽管您添加的术语越多,答案就越接近。
在上面的表达式中,x!
表示x
的阶乘:x! = x * (x - 1) * (x - 2) * ... * 1
为add
定义了所有必要的操作(divide
,pow
,BigDecimal
)。
编辑:事实证明Sigmoid函数有自己的Maclaurin series approximation:
1/(1 + exp(-x)) = 1/2 + 1/4 * x - 1/48 * x^3 + 1/480 x^5 - ...