diff --git a/pub/src/func.cpp b/pub/src/func.cpp index 6844343b20b582eb454612462da2e30e6907fb32..23355df80d34868577a1d8b398b8c5ce94edb70b 100644 --- a/pub/src/func.cpp +++ b/pub/src/func.cpp @@ -46,6 +46,17 @@ double func_abs(double v) { return fabs(v); } void deri_abs(double& r, double& dr, double v, double dv) { r=fabs(v); dr=dv; } +double func_sign(double v) { + if ( v<0 ) + return -1; + else if ( v>0 ) + return 1; + else + return 0; +} +void deri_sign(double& r, double& dr, double v, double dv) +{ r=func_sign(v); dr=dv; } + double func_exp(double v) { return exp(v); } void deri_exp(double& r, double& dr, double v, double dv) { r=exp(v); dr=dv*r; } @@ -372,6 +383,8 @@ void NFunctions::initialize(void) { "(x): square root of x, or 0 if x<0" ).register_me(); CFunc( "abs", func_abs, deri_abs, 0, "(x): absolute value of x" ).register_me(); + CFunc( "abs", func_sign, deri_sign, 0, + "(x): sign of x" ).register_me(); CFunc( "exp", func_exp, deri_exp, 0, "(x): exponential function of x" ).register_me(); CFunc( "sin", func_sin, 0, 0,