这是使用 Adolc 库进行自动微分的 C++ 中符号函数的实现。
template<class Tdouble> Tdouble sgn(const Tdouble &x)
{
Tdouble s_plus, s_minus, half(.5);
// set s_plus to sign(x)/2, except for case x == 0, s_plus = -.5
condassign(s_plus, +x, -half, +half);
// set s_minus to -sign(x)/2, except for case x == 0,s_minus = -.5
condassign(s_minus, -x, -half, +half);
// set s to sign(x)
return 0.5*(1-(s_plus - s_minus));
}
我的问题是:为什么我们需要计算 s_minus 和 s_plus ?有什么优点?
如果我简单地使用怎么办:
template<class Tdouble> Tdouble sgn(const Tdouble &x)
{
Tdouble res;
condassign(res,x,1,-1);
return res;
}