All files main.js

100% Statements 89/89
100% Branches 12/12
100% Functions 1/1
100% Lines 89/89

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 901x 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 41x 41x 41x 41x 41x 41x 41x 41x 41x 6x 6x 35x 35x 35x 35x 35x 35x 35x 35x 35x 35x 35x 35x 35x 41x 24x 24x 41x 41x 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 floorf = require( '@stdlib/math/base/special/floorf' );
var powf = require( '@stdlib/math/base/special/powf' );
var absf = require( '@stdlib/math/base/special/absf' );
var log10 = require( '@stdlib/math/base/special/log10' );
var f32 = require( '@stdlib/number/float64/base/to-float32' );
 
 
// MAIN //
 
/**
* Rounds a single-precision floating-point number to the nearest power of `10` on a linear scale.
*
* @param {number} x - input value
* @returns {number} rounded value
*
* @example
* var v = round10f( 3.1415926 );
* // returns 1.0
*
* @example
* var v = round10f( 123.45 );
* // returns 100.0
*
* @example
* var v = round10f( -2.5 );
* // returns -1.0
*
* @example
* var v = round10f( -0.0 );
* // returns -0.0
*/
function round10f( x ) {
	var ax;
	var e0;
	var e1;
	var y0;
	var y1;
 
	x = f32( x );
	if ( isnanf( x ) || isInfinitef( x ) || x === 0.0 ) {
		return x;
	}
	ax = absf( x );
 
	// Solve the equation `10^e = ax` for `e` and find the exponent of the previous integer power of ten:
	e0 = floorf( f32( log10( ax ) ) );
 
	// Find the exponent of the next integer power of ten:
	e1 = f32( e0 + 1 );
 
	// Compute the previous and next integer powers of ten:
	y0 = powf( 10.0, e0 );
	y1 = powf( 10.0, e1 );
 
	// Find the closest power of ten, rounding ties to the next integer power of ten (note: as single-precision values are exactly representable in double-precision and the operands are of similar magnitude, both differences are computed exactly in double-precision arithmetic):
	if ( ax - y0 < y1 - ax ) {
		return ( x < 0.0 ) ? f32( -y0 ) : y0;
	}
	return ( x < 0.0 ) ? f32( -y1 ) : y1;
}
 
 
// EXPORTS //
 
module.exports = round10f;