1

在这里提出问题,如果您能提供帮助,将不胜感激。

我正在尝试使用与我用于双精度值的代码行类似的东西来计算 bigdecimal 的 sigmoid 值

double a = 1 / (1 + Math.exp("a"));

但是我想对 bigdecimal 数据类型执行相同的操作,但我找不到可以为 bigdecimal 执行此操作的代码

Math.exp(x) 

是否有任何简短的代码可以在 bigdecimal 上提供这个 sigmoid 值

提前致谢

4

2 回答 2

2

看看使用泰勒公式的贝叶斯 MCMC BigDecimalUtils.exp()

BigDecimal exponential = BigDecimalUtils.exp(BigDecimal.valueOf(3.2), 4);
于 2012-12-09T02:31:35.147 回答
0

Math.exp(x)您可以使用 Taylor/Maclaurin 级数展开近似指数函数:

exp(x) = sum_n=0^infinity x^n / (n!)这等于:

exp(x) = 1 + x + (x^2)/2! + (x^3)/3! + (x^4)/4! + ...

虽然这是无数项的总和,但您可以在前几项之后停下来获得近似解,尽管添加的项越多,答案就越接近。

在上面的表达式中,x!表示 的阶乘xx! = x * (x - 1) * (x - 2) * ... * 1

所有必要的操作(add, divide, pow)都是为 定义的BigDecimal

编辑:事实证明,Sigmoid 函数有自己的Maclaurin 级数近似

1/(1 + exp(-x)) = 1/2 + 1/4 * x - 1/48 * x^3 + 1/480 x^5 - ...

于 2012-12-09T02:27:29.653 回答