Exponential Function
The exponential function is defined as
where b
is the base and x
is the exponent.
Usage
var pow = require( '@stdlib/math/base/special/fast/pow-int' );
pow( base, exponent )
Evaluates the exponential function given a signed 32-bit integer exponent
.
var v = pow( 2.0, 3 );
// returns 8.0
v = pow( 100.0, 0 );
// returns 1.0
v = pow( 3.14, 1 );
// returns 3.14
v = pow( -3.14, 1 );
// returns -3.14
v = pow( 2.0, -2 );
// returns 0.25
v = pow( NaN, 3 );
// returns NaN
Notes
This implementation is not recommended for high-precision applications due to error accumulation. As a trivial example, consider
var v = pow( 10.0, 308 ); // returns 1.0000000000000006e+308
where the expected result is
1.0e+308
.If provided a negative
exponent
, the implementation first computes the reciprocal of thebase
and then evaluates the exponential function. This can introduce significant error. For example,var v = pow( -459, -98 ); // returns 1.3878956588399783e-261
where the expected result is
1.3878956588399598e-261
. From the bit sequences,0000100111000101110110100000000111001011001011010001000101010110 0000100111000101110110100000000111001011001011010001000100000100
one observes that the returned value differs in the last
7
bits of the significand.
Examples
var pow = require( '@stdlib/math/base/special/fast/pow-int' );
var x;
var y;
var v;
x = 10.0;
for ( y = 0; y < 309; y++ ) {
v = pow( x, y );
console.log( '%d^%d = %d', x, y, v );
}
C APIs
Usage
#include "stdlib/math/base/special/fast/pow.h"
stdlib_base_fast_pow( x, y )
Evaluates the exponential function given a signed 32-bit integer exponent
.
double out = stdlib_base_fast_pow( 2.0, 3 );
// returns 8.0
out = stdlib_base_fast_pow( 3.14, 0 );
// returns 1.0
The function accepts the following arguments:
- x:
[in] double
base. - y:
[in] double
exponent.
double stdlib_base_fast_pow( const double x, const int32_t y );
Examples
#include "stdlib/math/base/special/fast/pow.h"
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
int main( void ) {
const double x[] = { 3.14, 2.0, 2.0, 0.0 };
const int32_t y[] = { 0, 3, -2, 0 };
double z;
int i;
for ( i = 0; i < 4; i++ ) {
z = stdlib_base_fast_pow( x[ i ], y[ i ] );
printf( "pow( %lf, %d ) = %lf\n", x[ i ], y[ i ], z );
}
}