Evaluate
bˣ - 1
.
When b
is close to 1
and/or x
is small, this implementation is more accurate than naively computing bˣ
minus 1
.
var powm1 = require( '@stdlib/math/base/special/powm1' );
Evaluates bˣ - 1
.
var y = powm1( 2.0, 3.0 );
// returns 7.0
y = powm1( 4.0, 0.5 );
// returns 1.0
y = powm1( 0.0, 100.0 );
// returns -1.0
y = powm1( 100.0, 0.0 );
// returns 0.0
y = powm1( 0.0, 0.0 );
// returns 0.0
y = powm1( 3.141592653589793, 5.0 );
// returns ~305.0197
y = powm1( NaN, 3.0 );
// returns NaN
y = powm1( 5.0, NaN );
// returns NaN
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var logEachMap = require( '@stdlib/console/log-each-map' );
var powm1 = require( '@stdlib/math/base/special/powm1' );
var opts = {
'dtype': 'float64'
};
var b = discreteUniform( 100, 0, 10, opts );
var x = discreteUniform( 100, -5, 5, opts );
logEachMap( '%d^%d - 1 = %0.4f', b, x, powm1 );
#include "stdlib/math/base/special/powm1.h"
Evaluates bˣ - 1
.
double out = stdlib_base_powm1( 3.141592653589793, 5.0 );
// returns ~305.0197
out = stdlib_base_powm1( 4.0, 0.5 );
// returns 1.0
The function accepts the following arguments:
- base:
[in] double
base. - exponent:
[in] double
exponent.
double stdlib_base_powm1( const double base, const double exponent );
#include "stdlib/math/base/special/powm1.h"
#include <stdlib.h>
#include <stdio.h>
int main( void ) {
double out;
double b;
double x;
int i;
for ( i = 0; i < 100; i++ ) {
b = ( ( (double)rand() / (double)RAND_MAX ) * 10.0 );
x = ( ( (double)rand() / (double)RAND_MAX ) * 10.0 ) - 5.0;
out = stdlib_base_powm1( b, x );
printf( "powm1(%lf, %lf) = %lf\n", b, x, out );
}
}
@stdlib/math/base/special/pow
: exponential function.