在这里提出问题,如果您能提供帮助,将不胜感激。
我正在尝试使用与我用于双精度值的代码行类似的东西来计算 bigdecimal 的 sigmoid 值
double a = 1 / (1 + Math.exp("a"));
但是我想对 bigdecimal 数据类型执行相同的操作,但我找不到可以为 bigdecimal 执行此操作的代码
Math.exp(x)
是否有任何简短的代码可以在 bigdecimal 上提供这个 sigmoid 值
提前致谢
在这里提出问题,如果您能提供帮助,将不胜感激。
我正在尝试使用与我用于双精度值的代码行类似的东西来计算 bigdecimal 的 sigmoid 值
double a = 1 / (1 + Math.exp("a"));
但是我想对 bigdecimal 数据类型执行相同的操作,但我找不到可以为 bigdecimal 执行此操作的代码
Math.exp(x)
是否有任何简短的代码可以在 bigdecimal 上提供这个 sigmoid 值
提前致谢
看看使用泰勒公式的贝叶斯 MCMC BigDecimalUtils.exp()。
BigDecimal exponential = BigDecimalUtils.exp(BigDecimal.valueOf(3.2), 4);
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!
表示 的阶乘x
:x! = 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 - ...