@item @code{csgn(z)}
@tab complex sign (returns an @code{int})
@item @code{step(x)}
-@tab step function (returns an @code{int})
+@tab step function (returns an @code{numeric})
@item @code{numer(z)}
@tab numerator of rational or complex rational number
@item @code{denom(z)}
return pseries(rel,seq);
}
-static ex step_power(const ex & arg, const ex & exp)
-{
- if (exp.info(info_flags::positive))
- return step(arg);
-
- return power(step(arg), exp).hold();
-}
-
static ex step_conjugate(const ex& arg)
{
return step(arg);
REGISTER_FUNCTION(step, eval_func(step_eval).
evalf_func(step_evalf).
series_func(step_series).
- conjugate_func(step_conjugate).
- power_func(step_power));
+ conjugate_func(step_conjugate));
//////////
// Complex sign
* ignored because the step function is generally considered real but
* a numeric may develop a small imaginary part due to rounding errors.
*/
-int numeric::step() const
+numeric numeric::step() const
{ cln::cl_R r = cln::realpart(value);
if(cln::zerop(r))
- return 1;
+ return numeric(1,2);
if(cln::plusp(r))
return 1;
return 0;
const numeric & operator=(double d);
const numeric & operator=(const char *s);
const numeric inverse() const;
- int step() const;
+ numeric step() const;
int csgn() const;
int compare(const numeric &other) const;
bool is_equal(const numeric &other) const;
inline const numeric inverse(const numeric &x)
{ return x.inverse(); }
-inline int step(const numeric &x)
+inline numeric step(const numeric &x)
{ return x.step(); }
inline int csgn(const numeric &x)