diff options
Diffstat (limited to '3rdParty/Boost/src/boost/rational.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/rational.hpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/3rdParty/Boost/src/boost/rational.hpp b/3rdParty/Boost/src/boost/rational.hpp index 468db79..fd04b6b 100644 --- a/3rdParty/Boost/src/boost/rational.hpp +++ b/3rdParty/Boost/src/boost/rational.hpp @@ -22,21 +22,21 @@ // Revision History // 05 Nov 06 Change rational_cast to not depend on division between different // types (Daryle Walker) // 04 Nov 06 Off-load GCD and LCM to Boost.Math; add some invariant checks; // add std::numeric_limits<> requirement to help GCD (Daryle Walker) // 31 Oct 06 Recoded both operator< to use round-to-negative-infinity // divisions; the rational-value version now uses continued fraction // expansion to avoid overflows, for bug #798357 (Daryle Walker) -// 20 Oct 06 Fix operator bool_type for CW 8.3 (Joaquín M López Muñoz) +// 20 Oct 06 Fix operator bool_type for CW 8.3 (JoaquÃn M López Muñoz) // 18 Oct 06 Use EXPLICIT_TEMPLATE_TYPE helper macros from Boost.Config -// (Joaquín M López Muñoz) +// (JoaquÃn M López Muñoz) // 27 Dec 05 Add Boolean conversion operator (Daryle Walker) // 28 Sep 02 Use _left versions of operators from operators.hpp // 05 Jul 01 Recode gcd(), avoiding std::swap (Helmut Zeisel) // 03 Mar 01 Workarounds for Intel C++ 5.0 (David Abrahams) // 05 Feb 01 Update operator>> to tighten up input syntax // 05 Feb 01 Final tidy up of gcd code prior to the new release // 27 Jan 01 Recode abs() without relying on abs(IntType) // 21 Jan 01 Include Nickolay Mladenov's operator+= algorithm, // tidy up a number of areas, use newer features of operators.hpp @@ -383,21 +383,23 @@ bool rational<IntType>::operator< (const rational<IntType>& r) const // This should really be a class-wide invariant. The reason for these // checks is that for 2's complement systems, INT_MIN has no corresponding // positive, so negating it during normalization keeps it INT_MIN, which // is bad for later calculations that assume a positive denominator. BOOST_ASSERT( this->den > zero ); BOOST_ASSERT( r.den > zero ); // Determine relative order by expanding each value to its simple continued // fraction representation using the Euclidian GCD algorithm. - struct { int_type n, d, q, r; } ts = { this->num, this->den, this->num / - this->den, this->num % this->den }, rs = { r.num, r.den, r.num / r.den, - r.num % r.den }; + struct { int_type n, d, q, r; } + ts = { this->num, this->den, static_cast<int_type>(this->num / this->den), + static_cast<int_type>(this->num % this->den) }, + rs = { r.num, r.den, static_cast<int_type>(r.num / r.den), + static_cast<int_type>(r.num % r.den) }; unsigned reverse = 0u; // Normalize negative moduli by repeatedly adding the (positive) denominator // and decrementing the quotient. Later cycles should have all positive // values, so this only has to be done for the first cycle. (The rules of // C++ require a nonnegative quotient & remainder for a nonnegative dividend // & positive divisor.) while ( ts.r < zero ) { ts.r += ts.d; --ts.q; } while ( rs.r < zero ) { rs.r += rs.d; --rs.q; } |