mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
fix implicit scalar conversions (needed to support fancy scalar types, see bug #276)
This commit is contained in:
@@ -104,9 +104,9 @@ bool JacobiRotation<Scalar>::makeJacobi(RealScalar x, Scalar y, RealScalar z)
|
||||
else
|
||||
{
|
||||
RealScalar tau = (x-z)/(RealScalar(2)*internal::abs(y));
|
||||
RealScalar w = internal::sqrt(internal::abs2(tau) + 1);
|
||||
RealScalar w = internal::sqrt(internal::abs2(tau) + static_cast<RealScalar>(1));
|
||||
RealScalar t;
|
||||
if(tau>0)
|
||||
if(tau>static_cast<RealScalar>(0))
|
||||
{
|
||||
t = RealScalar(1) / (tau + w);
|
||||
}
|
||||
@@ -114,8 +114,8 @@ bool JacobiRotation<Scalar>::makeJacobi(RealScalar x, Scalar y, RealScalar z)
|
||||
{
|
||||
t = RealScalar(1) / (tau - w);
|
||||
}
|
||||
RealScalar sign_t = t > 0 ? 1 : -1;
|
||||
RealScalar n = RealScalar(1) / internal::sqrt(internal::abs2(t)+1);
|
||||
RealScalar sign_t = t > static_cast<RealScalar>(0) ? static_cast<RealScalar>(1) : static_cast<RealScalar>(-1);
|
||||
RealScalar n = RealScalar(1) / internal::sqrt(internal::abs2(t)+static_cast<RealScalar>(1));
|
||||
m_s = - sign_t * (internal::conj(y) / internal::abs(y)) * internal::abs(t) * n;
|
||||
m_c = n;
|
||||
return true;
|
||||
@@ -221,15 +221,15 @@ template<typename Scalar>
|
||||
void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::false_type)
|
||||
{
|
||||
|
||||
if(q==0)
|
||||
if(q==static_cast<Scalar>(0))
|
||||
{
|
||||
m_c = p<Scalar(0) ? Scalar(-1) : Scalar(1);
|
||||
m_s = 0;
|
||||
m_s = Scalar(0);
|
||||
if(r) *r = internal::abs(p);
|
||||
}
|
||||
else if(p==0)
|
||||
else if(p==static_cast<Scalar>(0))
|
||||
{
|
||||
m_c = 0;
|
||||
m_c = Scalar(0);
|
||||
m_s = q<Scalar(0) ? Scalar(1) : Scalar(-1);
|
||||
if(r) *r = internal::abs(q);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user