Mercurial > hg > octave-nkf
diff src/ov-complex.cc @ 7667:fb3a6c53c2b2
Allow negative zero imaginary part to be treated as zero for erf, erfc, gamma and lgamma mapper function
author | David Bateman <dbateman@free.fr> |
---|---|
date | Fri, 28 Mar 2008 18:26:29 +0100 |
parents | 2df457529cfa |
children | 39930366b709 |
line wrap: on
line diff
--- a/src/ov-complex.cc +++ b/src/ov-complex.cc @@ -358,6 +358,42 @@ return octave_value (FCN (scalar)); \ } +#define SCALAR_MAPPER(MAP, FCN) \ + octave_value \ + octave_complex::MAP (void) const \ + { \ + if (scalar.imag () == 0) \ + return octave_value (FCN (scalar.real ())); \ + else \ + { \ + error ("%s: not defined for complex arguments", #MAP); \ + return octave_value (); \ + } \ + } + +#define CD_SCALAR_MAPPER(MAP, RFCN, CFCN, L1, L2) \ + octave_value \ + octave_complex::MAP (void) const \ + { \ + if (scalar.imag () == 0) \ + { \ + double re = scalar.real (); \ + return (re < L1 || re > L2 \ + ? octave_value (CFCN (scalar)) \ + : octave_value (RFCN (re))); \ + } \ + else \ + { \ + error ("%s: not defined for complex arguments", #MAP); \ + return octave_value (); \ + } \ + } + +SCALAR_MAPPER (erf, ::erf) +SCALAR_MAPPER (erfc, ::erfc) +SCALAR_MAPPER (gamma, xgamma) +CD_SCALAR_MAPPER (lgamma, xlgamma, xlgamma, 0.0, octave_Inf) + COMPLEX_MAPPER (abs, xabs) COMPLEX_MAPPER (acos, ::acos) COMPLEX_MAPPER (acosh, ::acosh)