-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
feat: add math/base/special/round10f
#9525
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
37 commits
Select commit
Hold shift + click to select a range
0aa9703
feat: add math/base/special/round10f
aryan7071 f5a68ee
feat: add math/base/special/round10f
aryan7071 3fb5f69
feat: add math/base/special/round10f
aryan7071 7373d1a
feat: add math/base/special/round10f
aryan7071 666c9a0
feat: add math/base/special/round10f
aryan7071 a391f97
feat: add math/base/special/round10f
aryan7071 8e3bc57
feat: add math/base/special/round10f
aryan7071 b15dfe7
feat: add math/base/special/round10f
aryan7071 fa5b9f4
feat: unary round10f
aryan7071 97811fc
feat: unary round10f
aryan7071 fa5042b
feat: unary round10f
aryan7071 c735e6d
feat: unary round10f
aryan7071 5a288bb
feat: unary round10f
aryan7071 26ff1cb
feat: unary round10f
aryan7071 3097893
feat: unary round10f
aryan7071 ac44e62
feat: fix round10f
aryan7071 2839fc0
feat: fix round10f
aryan7071 21e0582
feat: fix round10f
aryan7071 f3637a1
fix: update year headers and correct examples/c/Makefile + lib/index.js
aryan7071 4330a92
fix: main.js + index.d.ts + test.ts + repl.txt
aryan7071 0077706
fix: address review feedback for round10f C implementation and docs
aryan7071 514945c
fix: address review feedback for round10f C implementation and docs
aryan7071 623fe68
docs: fix documentation style and whitespace for round10f
aryan7071 262df83
chore: address review feedback for round10f
aryan7071 55c762f
chore: address review feedback for round10f
aryan7071 360caea
chore: address review feedback for round10f
aryan7071 b6aa583
fix: update copyright year
aryan7071 a4b652e
Merge branch 'develop' into add-round10f
anandkaranubc 3807618
chore: code review
anandkaranubc 610ecd2
chore: code review
anandkaranubc d0e61ab
Merge branch 'develop' into add-round10f
kgryte 9395282
Merge branch 'develop' into add-round10f
anandkaranubc 5b8839a
chore: code review
anandkaranubc 921354a
chore: code review
anandkaranubc 8d1ee5f
chore: code review
anandkaranubc 8188e76
chore: code review
anandkaranubc d783092
Apply suggestions from code review
kgryte File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
208 changes: 208 additions & 0 deletions
208
lib/node_modules/@stdlib/math/base/special/round10f/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,208 @@ | ||
| <!-- | ||
|
|
||
| @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. | ||
|
|
||
| --> | ||
|
|
||
| # round10f | ||
|
|
||
| > Round a single-precision floating-point number to the nearest power of 10 on a linear scale. | ||
|
|
||
| <section class="usage"> | ||
|
|
||
| ## Usage | ||
|
|
||
| ```javascript | ||
| var round10f = require( '@stdlib/math/base/special/round10f' ); | ||
| ``` | ||
|
|
||
| #### round10f( x ) | ||
|
|
||
| Rounds a single-precision floating-point number to the nearest power of `10` on a linear scale. | ||
|
|
||
| ```javascript | ||
| var v = round10f( -4.2 ); | ||
| // returns -1.0 | ||
|
|
||
| v = round10f( -4.5 ); | ||
| // returns -1.0 | ||
|
|
||
| v = round10f( -4.6 ); | ||
| // returns -1.0 | ||
|
|
||
| v = round10f( 9.99999 ); | ||
| // returns 10.0 | ||
|
|
||
| v = round10f( 9.5 ); | ||
| // returns 10.0 | ||
|
|
||
| v = round10f( 13.0 ); | ||
| // returns 10.0 | ||
|
|
||
| v = round10f( -13.0 ); | ||
| // returns -10.0 | ||
|
|
||
| v = round10f( 0.0 ); | ||
| // returns 0.0 | ||
|
|
||
| v = round10f( -0.0 ); | ||
| // returns -0.0 | ||
|
|
||
| v = round10f( Infinity ); | ||
| // returns Infinity | ||
|
|
||
| v = round10f( -Infinity ); | ||
| // returns -Infinity | ||
|
|
||
| v = round10f( NaN ); | ||
| // returns NaN | ||
| ``` | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.usage --> | ||
|
|
||
| <section class="examples"> | ||
|
|
||
| ## Examples | ||
|
|
||
| <!-- eslint no-undef: "error" --> | ||
|
|
||
| ```javascript | ||
| var uniform = require( '@stdlib/random/array/uniform' ); | ||
| var logEachMap = require( '@stdlib/console/log-each-map' ); | ||
| var round10f = require( '@stdlib/math/base/special/round10f' ); | ||
|
|
||
| var opts = { | ||
| 'dtype': 'float32' | ||
| }; | ||
| var x = uniform( 100, -50.0, 50.0, opts ); | ||
|
|
||
| logEachMap( 'x: %0.4f. Rounded: %0.4f.', x, round10f ); | ||
| ``` | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.examples --> | ||
|
|
||
| <!-- C interface documentation. --> | ||
|
|
||
| * * * | ||
|
|
||
| <section class="c"> | ||
|
|
||
| ## C APIs | ||
|
|
||
| <!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. --> | ||
|
|
||
| <section class="intro"> | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.intro --> | ||
|
|
||
| <!-- C usage documentation. --> | ||
|
|
||
| <section class="usage"> | ||
|
|
||
| ### Usage | ||
|
|
||
| ```c | ||
| #include "stdlib/math/base/special/round10f.h" | ||
| ``` | ||
|
|
||
| #### stdlib_base_round10f( x ) | ||
|
|
||
| Rounds a single-precision floating-point number to the nearest power of `10` on a linear scale. | ||
|
|
||
| ```c | ||
| float out = stdlib_base_round10f( 3.14f ); | ||
| // returns 1.0f | ||
|
|
||
| out = stdlib_base_round10f( 13.0f ); | ||
| // returns 10.0f | ||
| ``` | ||
|
|
||
| The function accepts the following arguments: | ||
|
|
||
| - **x**: `[in] float` input value. | ||
|
|
||
| ```c | ||
| float stdlib_base_round10f( const float x ); | ||
| ``` | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.usage --> | ||
|
|
||
| <!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. --> | ||
|
|
||
| <section class="notes"> | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.notes --> | ||
|
|
||
| <!-- C API usage examples. --> | ||
|
|
||
| <section class="examples"> | ||
|
|
||
| ### Examples | ||
|
|
||
| ```c | ||
| #include "stdlib/math/base/special/round10f.h" | ||
| #include <stdio.h> | ||
|
|
||
| int main( void ) { | ||
| const float x[] = { -5.0f, -3.89f, -2.78f, -1.67f, -0.56f, 0.56f, 1.67f, 2.78f, 3.89f, 5.0f }; | ||
|
|
||
| float v; | ||
| int i; | ||
| for ( i = 0; i < 10; i++ ) { | ||
| v = stdlib_base_round10f( x[ i ] ); | ||
| printf( "round10f(%f) = %f\n", x[ i ], v ); | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.examples --> | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.c --> | ||
|
|
||
| <!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. --> | ||
|
|
||
| <section class="related"> | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.related --> | ||
|
|
||
| <!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. --> | ||
|
|
||
| <section class="links"> | ||
|
|
||
| <!-- <related-links> --> | ||
|
|
||
| <!-- </related-links> --> | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.links --> | ||
54 changes: 54 additions & 0 deletions
54
lib/node_modules/@stdlib/math/base/special/round10f/benchmark/benchmark.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| /** | ||
| * @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 bench = require( '@stdlib/bench' ); | ||
| var uniform = require( '@stdlib/random/array/uniform' ); | ||
| var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); | ||
| var pkg = require( './../package.json' ).name; | ||
| var round10f = require( './../lib' ); | ||
|
|
||
|
|
||
| // MAIN // | ||
|
|
||
| bench( pkg, function benchmark( b ) { | ||
| var x; | ||
| var y; | ||
| var i; | ||
|
|
||
| x = uniform( 100, -5.0e6, 5.0e6, { | ||
| 'dtype': 'float32' | ||
| }); | ||
|
|
||
| b.tic(); | ||
| for ( i = 0; i < b.iterations; i++ ) { | ||
| y = round10f( x[ i%x.length ] ); | ||
| if ( isnanf( y ) ) { | ||
| b.fail( 'should not return NaN' ); | ||
| } | ||
| } | ||
| b.toc(); | ||
| if ( isnanf( y ) ) { | ||
| b.fail( 'should not return NaN' ); | ||
| } | ||
| b.pass( 'benchmark finished' ); | ||
| b.end(); | ||
| }); |
64 changes: 64 additions & 0 deletions
64
lib/node_modules/@stdlib/math/base/special/round10f/benchmark/benchmark.native.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,64 @@ | ||
| /** | ||
| * @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 resolve = require( 'path' ).resolve; | ||
| var bench = require( '@stdlib/bench' ); | ||
| var uniform = require( '@stdlib/random/array/uniform' ); | ||
| var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); | ||
| var tryRequire = require( '@stdlib/utils/try-require' ); | ||
| var format = require( '@stdlib/string/format' ); | ||
| var pkg = require( './../package.json' ).name; | ||
|
|
||
|
|
||
| // VARIABLES // | ||
|
|
||
| var round10f = tryRequire( resolve( __dirname, './../lib/native.js' ) ); | ||
| var opts = { | ||
| 'skip': ( round10f instanceof Error ) | ||
| }; | ||
|
|
||
|
|
||
| // MAIN // | ||
|
|
||
| bench( format( '%s::native', pkg ), opts, function benchmark( b ) { | ||
| var x; | ||
| var y; | ||
| var i; | ||
|
|
||
| x = uniform( 100, -5.0e6, 5.0e6, { | ||
| 'dtype': 'float32' | ||
| }); | ||
|
|
||
| b.tic(); | ||
| for ( i = 0; i < b.iterations; i++ ) { | ||
| y = round10f( x[ i%x.length ] ); | ||
| if ( isnanf( y ) ) { | ||
| b.fail( 'should not return NaN' ); | ||
| } | ||
| } | ||
| b.toc(); | ||
| if ( isnanf( y ) ) { | ||
| b.fail( 'should not return NaN' ); | ||
| } | ||
| b.pass( 'benchmark finished' ); | ||
| b.end(); | ||
| }); |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.