patternjavascriptModerate
Power function in JavaScript
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:
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
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.