HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavascriptModerate

Power function in JavaScript

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
javascriptfunctionpower

Problem

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;
};

Solution

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) {
        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).

Code Snippets

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;
}

Context

StackExchange Code Review Q#45630, answer score: 10

Revisions (0)

No revisions yet.