Mercurial > octave
diff libinterp/corefcn/mappers.cc @ 15487:ecf5be238b4a
provide signbit mapper for real values
* mappers.cc (Fsignbit): New function and tests.
* ov-base.cc (octave_base_value::get_umap_name): Include signbit in
the list.
* ov-base.h (octave_base_value::unary_mapper_t): Include umap_xsignbit
in the list.
* ov-float.cc (octave_float_scalar::map): Handle xsignbit.
* ov-scalar.cc (octave_scalar::map): Handle xsignbit.
* ov-re-mat.cc (octave_matrix::map): Handle xsignbit.
* ov-flt-re-mat.cc (octave_float_matrix::map): Handle xsignbit.
* lo-mappers.h (xsignbit): New template function.
* arith.txi: Document signbit.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 04 Oct 2012 09:48:07 -0400 |
parents | 2fc554ffbc28 |
children | 481417a57a2d |
line wrap: on
line diff
--- a/libinterp/corefcn/mappers.cc Wed Oct 03 09:41:14 2012 -0700 +++ b/libinterp/corefcn/mappers.cc Thu Oct 04 09:48:07 2012 -0400 @@ -1780,6 +1780,40 @@ %!error sign (1, 2) */ +DEFUNX ("signbit", Fsignbit, args, , + "-*- texinfo -*-\n\ +@deftypefn {Mapping Function} {} signbit (@var{x})\n\ +Return a nonzero value if the value of @var{x} has its sign bit set.\n\ +\n\ +This is not the same as @code{x < 0.0}, because IEEE 754 floating point\n\ +allows zero to be signed. The comparison @code{-0.0 < 0.0} is false,\n\ +but @code{signbit (-0.0)} will return a nonzero value.\n\ +@end deftypefn") +{ + octave_value retval; + if (args.length () == 1) + retval = args(0).xsignbit (); + else + print_usage (); + + return retval; +} + +/* +%!assert (signbit (1) == 0) +%!assert (signbit (-2) != 0) +%!assert (signbit (0) == 0) +%!assert (signbit (-0) != 0) + +%!assert (signbit (single (1)) == 0) +%!assert (signbit (single (-2)) != 0) +%!assert (signbit (single (0)) == 0) +%!assert (signbit (single (-0)) != 0) + +%!error sign () +%!error sign (1, 2) +*/ + DEFUN (sin, args, , "-*- texinfo -*-\n\ @deftypefn {Mapping Function} {} sin (@var{x})\n\