All files main.js

95.95% Statements 95/99
90.47% Branches 19/21
100% Functions 1/1
95.95% Lines 95/99

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 1001x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 651x 651x 651x 651x 651x 651x 651x 651x 651x 651x 651x 651x 640x 651x 12x 12x 651x 9x 9x 651x 245x 245x 651x 381x 381x 4x 4x 4x 651x     4x 4x 4x 651x     4x 651x 1x 1x 1x 1x 1x  
/**
* @license Apache-2.0
*
* Copyright (c) 2026 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
 
'use strict';
 
// MODULES //
 
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
var isinfinitef = require( '@stdlib/math/base/assert/is-infinitef' );
var powf = require( '@stdlib/math/base/special/powf' );
var roundf = require( '@stdlib/math/base/special/roundf' );
var roundnf = require( '@stdlib/math/base/special/roundnf' );
var f32 = require( '@stdlib/number/float64/base/to-float32' );
 
 
// MAIN //
 
/**
* Rounds a single-precision floating-point number to the nearest multiple of \\(b^n\\) on a linear scale.
*
* @param {number} x - input value
* @param {integer} n - integer power
* @param {PositiveInteger} b - base
* @returns {number} rounded value
*
* @example
* // Round a value to 2 decimal places:
* var v = roundbf( 3.141592653589793, -2, 10 );
* // returns ~3.14
*
* @example
* // If n = 0 or b = 1, `roundbf` behaves like `roundf`:
* var v = roundbf( 3.141592653589793, 0, 2 );
* // returns 3.0
*
* @example
* // Round a value to the nearest multiple of two:
* var v = roundbf( 5.0, 1, 2 );
* // returns 6.0
*/
function roundbf( x, n, b ) {
	var y;
	var s;
 
	// Convert to float32:
	x = f32( x );
	if (
		isnanf( x ) ||
		isnanf( n ) ||
		isnanf( b ) ||
		b <= 0.0 ||
		isinfinitef( n ) ||
		isinfinitef( b )
	) {
		return NaN;
	}
	if ( isinfinitef( x ) || x === 0.0 ) {
		return x;
	}
	if ( b === 10.0 ) {
		return roundnf( x, n );
	}
	if ( n === 0 || b === 1.0 ) {
		return roundf( x );
	}
	s = powf( b, -n );
 
	// Check for overflow:
	if ( isinfinitef( s ) ) {
		return x;
	}
	y = roundf( x * s ) / s;
 
	// Check for overflow:
	if ( isinfinitef( y ) ) {
		return x;
	}
	return y;
}
 
 
// EXPORTS //
 
module.exports = roundbf;