Sign up ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I know that there may be better ways of writing this do you think that this code is written well enough to be used in a real world application?

    var pow = function ( base, power ) {
    var result = 1;
    if ( power < 0 ) {
        return ( 1 / pow( base, -(power)) );
    }
    for ( var i = 1; i <= power; i++ ) {
        result = result * base;
    }
    return result;
};
share|improve this question
3  
Math.pow() - it's built in (and roughly 5 times faster) –  Flambino Mar 28 '14 at 16:07

2 Answers 2

up vote 4 down vote accepted

For a power function with an integer exponent you can loop through the bits in the exponent instead of making a linear loop:

function pow(base, power) {
    if (power < 0) return 1 / pow(base, -power);
    var b = base, result = 1;
    while (power > 0) {
        if ((power & 1) != 0) {
            result *= b;
        }
        power >>= 1;
        b *= b;
    }
    return result;
}

This will only loop as many times as there are bits used in the exponent, for a value like 1000 that means 10 iterations instead of 1000.

Testing this with pow(2, 1000) in Firefox shows that it is about 70 times faster (but the built in method is still even 8 times faster).

share|improve this answer

The code in the OP won't return a correct result for non-integer values of power: for example, 0.5 should return the square root of the number.

Sometimes you want to use the Floating Point Coprocessor for a calculation: instead of implementing an algorithm using software running on the CPU.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.