feat: add C implementation for stats/base/dists/studentized-range/cdf#10106
feat: add C implementation for stats/base/dists/studentized-range/cdf#10106nirmaljb wants to merge 6 commits intostdlib-js:developfrom
stats/base/dists/studentized-range/cdf#10106Conversation
Coverage Report
The above coverage report was generated for the changes in this PR. |
stats/base/dists/studentized-range/cdfstats/base/dists/studentized-range/cdf
---
type: pre_commit_static_analysis_report
description: Results of running static analysis checks when committing changes.
report:
- task: lint_filenames
status: passed
- task: lint_editorconfig
status: passed
- task: lint_markdown
status: passed
- task: lint_package_json
status: passed
- task: lint_repl_help
status: na
- task: lint_javascript_src
status: passed
- task: lint_javascript_cli
status: na
- task: lint_javascript_examples
status: na
- task: lint_javascript_tests
status: passed
- task: lint_javascript_benchmarks
status: passed
- task: lint_python
status: na
- task: lint_r
status: na
- task: lint_c_src
status: missing_dependencies
- task: lint_c_examples
status: missing_dependencies
- task: lint_c_benchmarks
status: missing_dependencies
- task: lint_c_tests_fixtures
status: na
- task: lint_shell
status: na
- task: lint_typescript_declarations
status: passed
- task: lint_typescript_tests
status: na
- task: lint_license_headers
status: passed
---
---
type: pre_commit_static_analysis_report
description: Results of running static analysis checks when committing changes.
report:
- task: lint_filenames
status: passed
- task: lint_editorconfig
status: passed
- task: lint_markdown
status: na
- task: lint_package_json
status: na
- task: lint_repl_help
status: na
- task: lint_javascript_src
status: passed
- task: lint_javascript_cli
status: na
- task: lint_javascript_examples
status: na
- task: lint_javascript_tests
status: na
- task: lint_javascript_benchmarks
status: na
- task: lint_python
status: na
- task: lint_r
status: na
- task: lint_c_src
status: na
- task: lint_c_examples
status: na
- task: lint_c_benchmarks
status: na
- task: lint_c_tests_fixtures
status: na
- task: lint_shell
status: na
- task: lint_typescript_declarations
status: passed
- task: lint_typescript_tests
status: na
- task: lint_license_headers
status: passed
---
---
type: pre_commit_static_analysis_report
description: Results of running static analysis checks when committing changes.
report:
- task: lint_filenames
status: passed
- task: lint_editorconfig
status: passed
- task: lint_markdown
status: na
- task: lint_package_json
status: na
- task: lint_repl_help
status: na
- task: lint_javascript_src
status: na
- task: lint_javascript_cli
status: na
- task: lint_javascript_examples
status: na
- task: lint_javascript_tests
status: na
- task: lint_javascript_benchmarks
status: na
- task: lint_python
status: na
- task: lint_r
status: na
- task: lint_c_src
status: missing_dependencies
- task: lint_c_examples
status: na
- task: lint_c_benchmarks
status: missing_dependencies
- task: lint_c_tests_fixtures
status: na
- task: lint_shell
status: na
- task: lint_typescript_declarations
status: passed
- task: lint_typescript_tests
status: na
- task: lint_license_headers
status: passed
---
---
type: pre_commit_static_analysis_report
description: Results of running static analysis checks when committing changes.
report:
- task: lint_filenames
status: passed
- task: lint_editorconfig
status: passed
- task: lint_markdown
status: na
- task: lint_package_json
status: na
- task: lint_repl_help
status: na
- task: lint_javascript_src
status: na
- task: lint_javascript_cli
status: na
- task: lint_javascript_examples
status: na
- task: lint_javascript_tests
status: na
- task: lint_javascript_benchmarks
status: na
- task: lint_python
status: na
- task: lint_r
status: na
- task: lint_c_src
status: na
- task: lint_c_examples
status: na
- task: lint_c_benchmarks
status: na
- task: lint_c_tests_fixtures
status: na
- task: lint_shell
status: na
- task: lint_typescript_declarations
status: passed
- task: lint_typescript_tests
status: na
- task: lint_license_headers
status: passed
---
… snippet
---
type: pre_commit_static_analysis_report
description: Results of running static analysis checks when committing changes.
report:
- task: lint_filenames
status: passed
- task: lint_editorconfig
status: passed
- task: lint_markdown
status: na
- task: lint_package_json
status: na
- task: lint_repl_help
status: na
- task: lint_javascript_src
status: na
- task: lint_javascript_cli
status: na
- task: lint_javascript_examples
status: na
- task: lint_javascript_tests
status: na
- task: lint_javascript_benchmarks
status: na
- task: lint_python
status: na
- task: lint_r
status: na
- task: lint_c_src
status: missing_dependencies
- task: lint_c_examples
status: na
- task: lint_c_benchmarks
status: na
- task: lint_c_tests_fixtures
status: na
- task: lint_shell
status: na
- task: lint_typescript_declarations
status: passed
- task: lint_typescript_tests
status: na
- task: lint_license_headers
status: passed
---
… snippet
---
type: pre_commit_static_analysis_report
description: Results of running static analysis checks when committing changes.
report:
- task: lint_filenames
status: passed
- task: lint_editorconfig
status: passed
- task: lint_markdown
status: na
- task: lint_package_json
status: na
- task: lint_repl_help
status: na
- task: lint_javascript_src
status: na
- task: lint_javascript_cli
status: na
- task: lint_javascript_examples
status: na
- task: lint_javascript_tests
status: na
- task: lint_javascript_benchmarks
status: na
- task: lint_python
status: na
- task: lint_r
status: na
- task: lint_c_src
status: missing_dependencies
- task: lint_c_examples
status: na
- task: lint_c_benchmarks
status: na
- task: lint_c_tests_fixtures
status: na
- task: lint_shell
status: na
- task: lint_typescript_declarations
status: passed
- task: lint_typescript_tests
status: na
- task: lint_license_headers
status: passed
---
1e3bd36 to
240b121
Compare
Planeshifter
left a comment
There was a problem hiding this comment.
Thanks for your contribution! Left round of feedback.
| function cdf( q, r, v, nranges ) { | ||
| return addon( q, r, v, nranges ); | ||
| } |
There was a problem hiding this comment.
The native wrapper doesn't default nranges to 1 when undefined. Calling cdf(q, r, v) with three arguments forwards undefined to the addon (coerced to NaN), causing stdlib_base_is_positive_integer(NaN) to return false and the CDF to return NaN. This breaks parity with lib/main.js and contradicts the 3-arg JSDoc examples which claim ~0.0644.
| function cdf( q, r, v, nranges ) { | |
| return addon( q, r, v, nranges ); | |
| } | |
| function cdf( q, r, v, nranges ) { | |
| if ( nranges === void 0 ) { | |
| nranges = 1; | |
| } | |
| return addon( q, r, v, nranges ); | |
| } |
| * // returns ~0.913 | ||
| * | ||
| * @example | ||
| * var y = cdf( 0.5, 3.0, 2.0, 2, 1.0 ); |
There was a problem hiding this comment.
This example passes 5 arguments, but cdf only accepts 4 (q, r, v, nranges). Drop the trailing 1.0.
| * var y = cdf( 0.5, 3.0, 2.0, 2, 1.0 ); | |
| * var y = cdf( 0.5, 3.0, 2.0, 2 ); |
| p = 0.0; | ||
| } | ||
| } else { | ||
| // Case: |z| >= 37 |
There was a problem hiding this comment.
This is the else-branch of if ( zabs > 37.0 ), so it's the |z| <= 37 case.
| // Case: |z| >= 37 | |
| // Case: |z| <= 37 |
| static double CUTOFF = 7.071; // 10 / sqrt(2) | ||
| static double p0 = 220.2068679123761e0; | ||
| static double p1 = 221.2135961699311e0; | ||
| static double p2 = 112.0792914978709e0; | ||
| static double p3 = 33.91286607838300e0; | ||
| static double p4 = 6.373962203531650e0; | ||
| static double p5 = 0.7003830644436881e0; | ||
| static double p6 = 0.3526249659989109e-01; | ||
| static double q0 = 440.4137358247522e0; | ||
| static double q1 = 793.8265125199484e0; | ||
| static double q2 = 637.3336333788311e0; | ||
| static double q3 = 296.5642487796737e0; | ||
| static double q4 = 86.78073220294608e0; | ||
| static double q5 = 16.06417757920695e0; | ||
| static double q6 = 1.755667163182642e0; | ||
| static double q7 = 0.8838834764831844e-1; |
There was a problem hiding this comment.
These file-scope scalars are immutable — mark them static const double to match stdlib's C conventions.
| * | ||
| * @private | ||
| * @param z - standard deviation from the mean | ||
| * @returns evaluated CDF |
There was a problem hiding this comment.
Use @return (no trailing s) in C JSDoc to match stdlib convention. Update all occurrences in this file (apnorm, fint, gaussLegreQuadrature, prangeVInf, f26, gausslegdquad, and the main function).
| double cmm = ( b - a ) / 2.0; | ||
| double d = ( b + a ) / 2.0; | ||
| int32_t j; | ||
| for( j = 0; j < n; j++ ) { |
There was a problem hiding this comment.
Missing space after for. Every other loop in this file has one.
| for( j = 0; j < n; j++ ) { | |
| for ( j = 0; j < n; j++ ) { |
| * double y = cdf( 0.5, 3.0, 2.0, 2 ); | ||
| * // returns ~0.01 |
There was a problem hiding this comment.
Use the fully qualified C symbol in the @example block.
| * double y = cdf( 0.5, 3.0, 2.0, 2 ); | |
| * // returns ~0.01 | |
| * double y = stdlib_base_dists_studentized_range_cdf( 0.5, 3.0, 2.0, 1.0 ); | |
| * // returns ~0.0644 |
Resolves #3887.
Description
This pull request:
Related Issues
This pull request has the following related issues:
@stdlib/stats/base/dists/studentized-range/cdf#3887Questions
No.
Other
No.
Checklist
AI Assistance
If you answered "yes" above, how did you use AI assistance?
Disclosure
@stdlib-js/reviewers