aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/functors/UnaryFunctors.h
diff options
context:
space:
mode:
Diffstat (limited to 'Eigen/src/Core/functors/UnaryFunctors.h')
-rw-r--r--Eigen/src/Core/functors/UnaryFunctors.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/Eigen/src/Core/functors/UnaryFunctors.h b/Eigen/src/Core/functors/UnaryFunctors.h
index e16bdd589..6891cfdda 100644
--- a/Eigen/src/Core/functors/UnaryFunctors.h
+++ b/Eigen/src/Core/functors/UnaryFunctors.h
@@ -748,8 +748,13 @@ struct scalar_sign_op<Scalar,true> {
EIGEN_EMPTY_STRUCT_CTOR(scalar_sign_op)
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const
{
- typename NumTraits<Scalar>::Real aa = std::abs(a);
- return (aa==0) ? Scalar(0) : (a/aa);
+ using std::abs;
+ typedef typename NumTraits<Scalar>::Real real_type;
+ real_type aa = abs(a);
+ if (aa==0)
+ return Scalar(0);
+ aa = 1./aa;
+ return Scalar(real(a)*aa, imag(a)*aa );
}
//TODO
//template <typename Packet>