Implement gnc_numeric_invert via GncRational::invert.

This commit is contained in:
John Ralls 2015-10-23 14:14:20 -07:00
parent 50e3bf21db
commit 5537a7ed35
3 changed files with 3 additions and 17 deletions

View File

@ -487,20 +487,7 @@ gnc_numeric_invert(gnc_numeric num)
{
if (num.num == 0)
return gnc_numeric_zero();
if (num.denom > 0)
{
if (num.num < 0)
return gnc_numeric_create (-num.denom, -num.num);
return gnc_numeric_create (num.denom, num.num);
}
else /* Negative denominator means multiply instead of divide. */
{
int64_t mult = (num.num < 0 ? INT64_C(-1) : INT64_C(1));
qofint128 denom = mult128(-num.denom, mult * num.num);
if (denom.hi)
return gnc_numeric_error(GNC_ERROR_OVERFLOW);
return gnc_numeric_create (mult, denom.lo);
}
return static_cast<gnc_numeric>(GncNumeric(num).inv());
}
/* *******************************************************************
* double_to_gnc_numeric

View File

@ -80,9 +80,7 @@ GncRational::operator-() const noexcept
GncRational&
GncRational::inv () noexcept
{
auto tmp = m_num;
m_num = m_den;
m_den = tmp;
std::swap(m_num, m_den);
GncRational b {1, 1};
GncDenom d {*this, b, INT64_C(0), GNC_HOW_RND_NEVER };

View File

@ -44,6 +44,7 @@ public:
GncRational& div(GncRational b, GncDenom& d) noexcept;
GncRational& add(const GncRational& b, GncDenom& d) noexcept;
GncRational& sub(const GncRational& b, GncDenom& d) noexcept;
/** Inverts the number, equivalent of /= {1, 1} */
GncRational& inv() noexcept;