-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
Open
aryan7071
wants to merge
27
commits into
stdlib-js:develop
Choose a base branch
from
aryan7071:add-round10f
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 1 commit
Commits
Show all changes
27 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 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
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
203 changes: 203 additions & 0 deletions
203
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,203 @@ | ||
| <!-- | ||
|
|
||
| @license Apache-2.0 | ||
|
|
||
| Copyright (c) 2018 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 numeric value to the nearest multiple of \\(10^n\\) using single-precision floating-point arithmetic. | ||
|
|
||
| <section class="usage"> | ||
|
|
||
| ## Usage | ||
|
|
||
| ```javascript | ||
| var round10f = require( '@stdlib/math/base/special/round10f' ); | ||
| ``` | ||
|
|
||
| #### round10f( v, n ) | ||
|
|
||
| Rounds a numeric value to the nearest multiple of 10^n usingsingle-precision floating-point arithmetic. | ||
|
|
||
| ```javascript | ||
| var y; | ||
|
|
||
| y = round10f( 3.1415926, -2 ); | ||
| // returns 1 | ||
|
|
||
| y = round10f( 3.1415926, 0 ); | ||
| // returns 1 | ||
|
|
||
| y = round10f( 123.456, 1 ); | ||
| // returns 100 | ||
|
|
||
| y = round10f( -2.5, 0 ); | ||
| // returns -1 | ||
|
|
||
| y = round10f( -0.0, 0 ); | ||
| // returns -0 | ||
| ``` | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.usage --> | ||
|
|
||
| <section class="examples"> | ||
|
|
||
| ## Examples | ||
|
|
||
| ```javascript | ||
| var uniform = require( '@stdlib/random/array/uniform' ); | ||
| var logEachMap = require( '@stdlib/console/log-each-map' ); | ||
| var toFloat32 = require( '@stdlib/number/float64/base/to-float32' ); | ||
| var round10f = require( '@stdlib/math/base/special/round10f' ); | ||
|
|
||
| var opts = { | ||
| 'dtype': 'float32' | ||
| }; | ||
|
|
||
| var x = uniform( 100, -50.0, 50.0, opts ); | ||
|
|
||
| // Ensure float32 precision: | ||
| var i; | ||
| for ( i = 0; i < x.length; i++ ) { | ||
| x[ i ] = toFloat32( x[ i ] ); | ||
| } | ||
|
|
||
| var n = -1; | ||
|
|
||
| function fcn( v ) { | ||
| return round10f( v, n ); | ||
| } | ||
|
|
||
| logEachMap('x: %0.4f. Rounded: %0.4f.', x, fcn); | ||
| ``` | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.examples --> | ||
|
|
||
|
|
||
| * * * | ||
|
|
||
| <section class="c"> | ||
|
|
||
| ## C APIs | ||
|
|
||
| <section class="intro"> | ||
|
|
||
| This package provides a C API for rounding single-precision floating-point numbers to the nearest multiple of \\(10^n\\). | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.intro --> | ||
|
|
||
| <section class="usage"> | ||
|
|
||
| ### Usage | ||
|
|
||
| ```c | ||
| #include "stdlib/math/base/special/round10f.h" | ||
| ``` | ||
|
|
||
| #### stdlib_base_round10f( x, n ) | ||
|
|
||
| Rounds a single-precision floating-point number to the nearest multiple of \\(10^n\\). | ||
|
|
||
| ```c | ||
| float out = stdlib_base_round10f( 3.14f, 0 ); | ||
| // returns 3.0f | ||
|
|
||
| out = stdlib_base_round10f( 3.14f, -1 ); | ||
| // returns 3.1f | ||
| ``` | ||
|
|
||
| **Arguments** | ||
|
|
||
| - **x**: `[in] float` input value. | ||
| - **n**: `[in] int32_t` power of ten exponent. | ||
|
|
||
| **Returns** | ||
|
|
||
| - `float`: rounded value. | ||
|
|
||
| ```c | ||
| float stdlib_base_round10f( const float x, const int32_t n ); | ||
| ``` | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.usage --> | ||
|
|
||
| <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 | ||
| }; | ||
| const int n = -1; | ||
|
|
||
| float v; | ||
| int i; | ||
| for ( i = 0; i < 10; i++ ) { | ||
| v = stdlib_base_round10f( x[ i ], n ); | ||
| printf( "round10f(%f,%d) = %f\n", x[ i ], n, v ); | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.examples --> | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.c --> | ||
|
|
||
| <section class="related"> | ||
|
|
||
| * * * | ||
|
|
||
| ## See Also | ||
|
|
||
| - <span class="package-name">[`@stdlib/math/base/special/ceil10`][@stdlib/math/base/special/ceil10]</span><span class="delimiter">: </span><span class="description">round a numeric value to the nearest power of 10 toward positive infinity.</span> | ||
| - <span class="package-name">[`@stdlib/math/base/special/floor10`][@stdlib/math/base/special/floor10]</span><span class="delimiter">: </span><span class="description">round a numeric value to the nearest power of 10 toward negative infinity.</span> | ||
| - <span class="package-name">[`@stdlib/math/base/special/round`][@stdlib/math/base/special/round]</span><span class="delimiter">: </span><span class="description">round a numeric value to the nearest integer.</span> | ||
| - <span class="package-name">[`@stdlib/math/base/special/round2`][@stdlib/math/base/special/round2]</span><span class="delimiter">: </span><span class="description">round a numeric value to the nearest power of two on a linear scale.</span> | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.related --> | ||
|
|
||
| <section class="links"> | ||
|
|
||
| [@stdlib/math/base/special/ceil10]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/math/base/special/ceil10 | ||
| [@stdlib/math/base/special/floor10]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/math/base/special/floor10 | ||
| [@stdlib/math/base/special/round]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/math/base/special/round | ||
| [@stdlib/math/base/special/round2]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/math/base/special/round2 | ||
|
|
||
| </section> | ||
|
|
||
| <!-- /.links --> | ||
61 changes: 61 additions & 0 deletions
61
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,61 @@ | ||
| /** | ||
| * @license Apache-2.0 | ||
| * | ||
| * Copyright (c) 2024 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 toFloat32 = require( '@stdlib/number/float64/base/to-float32' ); | ||
| var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); | ||
| var round10f = require( './../lib/main.js' ); | ||
| var pkg = require( './../package.json' ).name; | ||
|
|
||
|
|
||
| // MAIN // | ||
|
|
||
| bench( pkg, function benchmark( b ) { | ||
| var exps; | ||
| var x; | ||
| var y; | ||
| var i; | ||
|
|
||
| // Generate float32 input values: | ||
| x = uniform( 100, -5.0e3, 5.0e3 ); | ||
| for ( i = 0; i < x.length; i++ ) { | ||
| x[ i ] = toFloat32( x[ i ] ); | ||
| } | ||
|
|
||
| exps = [ -3, -1, 0, 1, 3 ]; | ||
|
|
||
| b.tic(); | ||
| for ( i = 0; i < b.iterations; i++ ) { | ||
| y = round10f( x[ i % x.length ], exps[ i % exps.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(); | ||
| }); |
71 changes: 71 additions & 0 deletions
71
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,71 @@ | ||
| /** | ||
| * @license Apache-2.0 | ||
| * | ||
| * Copyright (c) 2024 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 toFloat32 = require( '@stdlib/number/float64/base/to-float32' ); | ||
| var isnan = 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 exps; | ||
| var x; | ||
| var y; | ||
| var i; | ||
|
|
||
| // Generate float32 input data: | ||
| x = uniform( 100, -5.0e3, 5.0e3 ); | ||
| for ( i = 0; i < x.length; i++ ) { | ||
| x[ i ] = toFloat32( x[ i ] ); | ||
| } | ||
|
|
||
| exps = [ -3, -1, 0, 1, 3 ]; | ||
|
|
||
| b.tic(); | ||
| for ( i = 0; i < b.iterations; i++ ) { | ||
| y = round10f( x[ i % x.length ], exps[ i % exps.length ] ); | ||
| if ( isnan( y ) ) { | ||
| b.fail( 'should not return NaN' ); | ||
| } | ||
| } | ||
| b.toc(); | ||
|
|
||
| if ( isnan( y ) ) { | ||
| b.fail( 'should not return NaN' ); | ||
| } | ||
| b.pass( 'benchmark finished' ); | ||
| b.end(); | ||
| }); |
Oops, something went wrong.
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.