Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r76434 - sandbox/big_number/boost/multiprecision
From: john_at_[hidden]
Date: 2012-01-12 12:03:28


Author: johnmaddock
Date: 2012-01-12 12:03:27 EST (Thu, 12 Jan 2012)
New Revision: 76434
URL: http://svn.boost.org/trac/boost/changeset/76434

Log:
Optimize increment and decrement.
Text files modified:
   sandbox/big_number/boost/multiprecision/fixed_int.hpp | 14 ++++++++++++--
   1 files changed, 12 insertions(+), 2 deletions(-)

Modified: sandbox/big_number/boost/multiprecision/fixed_int.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/fixed_int.hpp (original)
+++ sandbox/big_number/boost/multiprecision/fixed_int.hpp 2012-01-12 12:03:27 EST (Thu, 12 Jan 2012)
@@ -424,13 +424,19 @@
 inline void increment(fixed_int<Bits, Signed>& result)
 {
    static const limb_type one = 1;
- add(result, one);
+ if(result.data().elems[fixed_int<Bits, Signed>::limb_count - 1] < fixed_int<Bits, Signed>::max_limb_value)
+ ++result.data().elems[fixed_int<Bits, Signed>::limb_count - 1];
+ else
+ add(result, one);
 }
 template <unsigned Bits, bool Signed>
 inline void decrement(fixed_int<Bits, Signed>& result)
 {
    static const limb_type one = 1;
- subtract(result, one);
+ if(result.data().elems[fixed_int<Bits, Signed>::limb_count - 1])
+ --result.data().elems[fixed_int<Bits, Signed>::limb_count - 1];
+ else
+ subtract(result, one);
 }
 template <unsigned Bits, bool Signed>
 inline void subtract(fixed_int<Bits, Signed>& result, const fixed_int<Bits, Signed>& o)
@@ -720,6 +726,8 @@
       return;
    }
 
+ //fixed_int<Bits, Signed> last_r;
+ //bool last_neg;
    do
    {
       //
@@ -731,6 +739,8 @@
       // Calculate our best guess for how many times y divides into r:
       //
       limb_type guess;
+ //last_r = r;
+ //last_neg = r_neg;
       if((r.data()[r_order] <= y.data()[y_order]) && (r_order < fixed_int<Bits, Signed>::limb_count - 1))
       {
          double_limb_type a, b, v;


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk