Changeset 11287


Ignore:
Timestamp:
08/16/08 20:23:16 (15 years ago)
Author:
ehuelsmann
Message:

Repeated squaring instead of repeated multiplication.

Found by: Robert Dodier <robert_dodier--at--yahoo.com>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/MathFunctions.java

    r11286 r11287  
    738738                int pow = ((Fixnum)power).value;
    739739                if (pow > 0) {
    740                     for (int i = pow; i-- > 0;)
    741                         result = result.multiplyBy(base);
     740                    LispObject term = base;
     741                    while (pow != 0) {
     742                        if ((pow & 1) == 1)
     743                           result = result.multiplyBy(term);
     744
     745                        term = term.multiplyBy(term);
     746                        pow = pow >> 1;
     747                    }
    742748                } else if (pow < 0) {
    743                     for (int i = -pow; i-- > 0;)
    744                         result = result.divideBy(base);
     749                    LispObject term = base;
     750                    pow = -pow;
     751                    while (pow != 0) {
     752                        if ((pow & 1) == 1)
     753                           result = result.divideBy(term);
     754
     755                        term = term.multiplyBy(term);
     756                        pow = pow >> 1;
     757                    }
    745758                }
    746759                if (TRAP_OVERFLOW) {
Note: See TracChangeset for help on using the changeset viewer.