Skip to content

Fix atan2 inaccuracy in documentation - #146451

Merged
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs
Oct 4, 2025
Merged

Fix atan2 inaccuracy in documentation#146451
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs

Conversation

@DimitriiTrater

@DimitriiTraterDimitriiTrater commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Fixes#136275

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 11, 2025
@rustbot

Copy link
Copy Markdown
Collaborator

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@GrigorenkoPVGrigorenkoPV left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make more sense to rephrase the existing part in terms of >= +0.0 and <= -0.0 instead of adding a new section?

View changes since this review

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

If you take into account the signs of zeros in the function definition, then it will not make mathematical sense.
Signs of zeros in this context make sense only if we are talking about IEEE-754.
If you do it the way you say, then I need to remove the mathematical definition of the function from arctan and leave only the areas of incoming and outgoing values.

@DimitriiTrater

DimitriiTrater commented Sep 12, 2025

Copy link
Copy Markdown
ContributorAuthor

I can suggest this:
x >= +0, y >= +0: [0, π/2]
x <= -0, y >= +0: [π/2, π]
x >= +0, y <= -0: [-π/2, 0]
x <= -0, y <= -0: [-π, -π/2]

@GrigorenkoPV what do you think?

@GrigorenkoPV

Copy link
Copy Markdown
Contributor

Yes, this is what I had in mind, more or less. Though, probably with the sign included in the output too.

Also, not sure if the pi should be changed to π here.

@DimitriiTrater
DimitriiTraterforce-pushed the atan2_correctness_docs branch 2 times, most recently from b4d0c32 to 7236b23CompareSeptember 21, 2025 01:14
@GrigorenkoPV

GrigorenkoPV commented Sep 24, 2025

Copy link
Copy Markdown
Contributor

LGTM, but let's wait for the assigned reviewer

Comment threadlibrary/std/src/num/f128.rs Outdated
Comment on lines +560 to +563
/// * `x = 0`, `y = 0`: `0`
/// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
/// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
/// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
/// * `x >= +0`, `y >= +0`: `[+0, +pi/2]`
/// * `x >= +0`, `y <= -0`: `[-pi/2, -0]`
/// * `x <= -0`, `y >= +0`: `[+pi/2, +pi]`
/// * `x <= -0`, `y <= -0`: `[-pi, -pi/2]`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the mathematical representation is helpful to keep for the intuition. Maybe a table format would work nicely?

/// | `x` | `y` | Equivalent | Range |/// |---------|---------|---------------|--------------|/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |/// ...

Basically a combination of the piecewise bit from https://en.wikipedia.org/wiki/Atan2#Definition_and_computation with the format of https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Domains.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're here, would you mind also adding a note about how self and other map to x and y? The (y, x) argument order can be a bit surprising.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With your approach, I can suggest this:

 /// | `x` | `y` | Equivalent | Range |
/// |---------|---------|-------------------|---------------|
/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |
/// | `>= +0` | `<= -0` | `arctan(y/x)` | `[-pi/2, -0]` |
/// | `<= -0` | `>= +0` | `arctan(y/x) + pi`| `[+pi/2, +pi]`|
/// | `<= -0` | `<= -0` | `arctan(y/x) - pi`| `[-pi, -pi/2]`|

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing. And equivalent here is not a true for x, y in this inequalities.
I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Ah yeah, totally overlooked that.

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing.

What specifically? The current PR already makes use of +/-0, this seems reasonable to me.

I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

"Definition" seems reasonable to me. Or maybe "Piecewise Definition".

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated PR, "Piecewise Definition" - really good.

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

So, what's next?

@tgross35

Copy link
Copy Markdown
Member

So, what's next?

Me getting a chance to circle back :)

Looks excellent! Thank you for the updates, and @GrigorenkoPV for reviewing this.

@bors r+ rollup

@bors

bors commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit d834935 has been approved by tgross35

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 3, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #144908 (Fix doctest output json)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147190 (std: `sys::net` cleanups)
- #147245 (only replace the intended comma in pattern suggestions)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147269 (Add regression test for 123953)
- #147277 (Extract common logic for iterating over features)
- #147280 (Return to needs-llvm-components being info-only)
- #147292 (Respect `-Z` unstable options in `rustdoc --test`)
- #147300 (Add xtensa arch to object file creation)
r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT )
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147309 (Add documentation about unwinding to wasm targets)
- #147315 (bless autodiff batching test)
- #147323 (Fix top level ui tests check in tidy)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 11 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 10 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit baea20b into rust-lang:masterOct 4, 2025
10 checks passed
@rustbotrustbot added this to the 1.92.0 milestone Oct 4, 2025
rust-timer added a commit that referenced this pull request Oct 4, 2025
Rollup merge of #146451 - DimitriiTrater:atan2_correctness_docs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixes#136275
github-actionsBot pushed a commit to model-checking/verify-rust-std that referenced this pull request Oct 9, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

f64::atan2 documentation error

5 participants

@DimitriiTrater@rustbot@GrigorenkoPV@tgross35@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Fix atan2 inaccuracy in documentation by DimitriiTrater · Pull Request #146451 · rust-lang/rust · GitHub
Skip to content

Fix atan2 inaccuracy in documentation - #146451

Merged
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs
Oct 4, 2025
Merged

Fix atan2 inaccuracy in documentation#146451
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs

Conversation

@DimitriiTrater

@DimitriiTraterDimitriiTrater commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Fixes#136275

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 11, 2025
@rustbot

Copy link
Copy Markdown
Collaborator

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@GrigorenkoPVGrigorenkoPV left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make more sense to rephrase the existing part in terms of >= +0.0 and <= -0.0 instead of adding a new section?

View changes since this review

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

If you take into account the signs of zeros in the function definition, then it will not make mathematical sense.
Signs of zeros in this context make sense only if we are talking about IEEE-754.
If you do it the way you say, then I need to remove the mathematical definition of the function from arctan and leave only the areas of incoming and outgoing values.

@DimitriiTrater

DimitriiTrater commented Sep 12, 2025

Copy link
Copy Markdown
ContributorAuthor

I can suggest this:
x >= +0, y >= +0: [0, π/2]
x <= -0, y >= +0: [π/2, π]
x >= +0, y <= -0: [-π/2, 0]
x <= -0, y <= -0: [-π, -π/2]

@GrigorenkoPV what do you think?

@GrigorenkoPV

Copy link
Copy Markdown
Contributor

Yes, this is what I had in mind, more or less. Though, probably with the sign included in the output too.

Also, not sure if the pi should be changed to π here.

@DimitriiTrater
DimitriiTraterforce-pushed the atan2_correctness_docs branch 2 times, most recently from b4d0c32 to 7236b23CompareSeptember 21, 2025 01:14
@GrigorenkoPV

GrigorenkoPV commented Sep 24, 2025

Copy link
Copy Markdown
Contributor

LGTM, but let's wait for the assigned reviewer

Comment threadlibrary/std/src/num/f128.rs Outdated
Comment on lines +560 to +563
/// * `x = 0`, `y = 0`: `0`
/// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
/// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
/// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
/// * `x >= +0`, `y >= +0`: `[+0, +pi/2]`
/// * `x >= +0`, `y <= -0`: `[-pi/2, -0]`
/// * `x <= -0`, `y >= +0`: `[+pi/2, +pi]`
/// * `x <= -0`, `y <= -0`: `[-pi, -pi/2]`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the mathematical representation is helpful to keep for the intuition. Maybe a table format would work nicely?

/// | `x` | `y` | Equivalent | Range |/// |---------|---------|---------------|--------------|/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |/// ...

Basically a combination of the piecewise bit from https://en.wikipedia.org/wiki/Atan2#Definition_and_computation with the format of https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Domains.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're here, would you mind also adding a note about how self and other map to x and y? The (y, x) argument order can be a bit surprising.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With your approach, I can suggest this:

 /// | `x` | `y` | Equivalent | Range |
/// |---------|---------|-------------------|---------------|
/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |
/// | `>= +0` | `<= -0` | `arctan(y/x)` | `[-pi/2, -0]` |
/// | `<= -0` | `>= +0` | `arctan(y/x) + pi`| `[+pi/2, +pi]`|
/// | `<= -0` | `<= -0` | `arctan(y/x) - pi`| `[-pi, -pi/2]`|

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing. And equivalent here is not a true for x, y in this inequalities.
I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Ah yeah, totally overlooked that.

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing.

What specifically? The current PR already makes use of +/-0, this seems reasonable to me.

I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

"Definition" seems reasonable to me. Or maybe "Piecewise Definition".

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated PR, "Piecewise Definition" - really good.

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

So, what's next?

@tgross35

Copy link
Copy Markdown
Member

So, what's next?

Me getting a chance to circle back :)

Looks excellent! Thank you for the updates, and @GrigorenkoPV for reviewing this.

@bors r+ rollup

@bors

bors commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit d834935 has been approved by tgross35

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 3, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #144908 (Fix doctest output json)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147190 (std: `sys::net` cleanups)
- #147245 (only replace the intended comma in pattern suggestions)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147269 (Add regression test for 123953)
- #147277 (Extract common logic for iterating over features)
- #147280 (Return to needs-llvm-components being info-only)
- #147292 (Respect `-Z` unstable options in `rustdoc --test`)
- #147300 (Add xtensa arch to object file creation)
r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT )
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147309 (Add documentation about unwinding to wasm targets)
- #147315 (bless autodiff batching test)
- #147323 (Fix top level ui tests check in tidy)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 11 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 10 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit baea20b into rust-lang:masterOct 4, 2025
10 checks passed
@rustbotrustbot added this to the 1.92.0 milestone Oct 4, 2025
rust-timer added a commit that referenced this pull request Oct 4, 2025
Rollup merge of #146451 - DimitriiTrater:atan2_correctness_docs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixes#136275
github-actionsBot pushed a commit to model-checking/verify-rust-std that referenced this pull request Oct 9, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

f64::atan2 documentation error

5 participants

@DimitriiTrater@rustbot@GrigorenkoPV@tgross35@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix atan2 inaccuracy in documentation by DimitriiTrater · Pull Request #146451 · rust-lang/rust · GitHub
Skip to content

Fix atan2 inaccuracy in documentation - #146451

Merged
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs
Oct 4, 2025
Merged

Fix atan2 inaccuracy in documentation#146451
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs

Conversation

@DimitriiTrater

@DimitriiTraterDimitriiTrater commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Fixes#136275

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 11, 2025
@rustbot

Copy link
Copy Markdown
Collaborator

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@GrigorenkoPVGrigorenkoPV left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make more sense to rephrase the existing part in terms of >= +0.0 and <= -0.0 instead of adding a new section?

View changes since this review

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

If you take into account the signs of zeros in the function definition, then it will not make mathematical sense.
Signs of zeros in this context make sense only if we are talking about IEEE-754.
If you do it the way you say, then I need to remove the mathematical definition of the function from arctan and leave only the areas of incoming and outgoing values.

@DimitriiTrater

DimitriiTrater commented Sep 12, 2025

Copy link
Copy Markdown
ContributorAuthor

I can suggest this:
x >= +0, y >= +0: [0, π/2]
x <= -0, y >= +0: [π/2, π]
x >= +0, y <= -0: [-π/2, 0]
x <= -0, y <= -0: [-π, -π/2]

@GrigorenkoPV what do you think?

@GrigorenkoPV

Copy link
Copy Markdown
Contributor

Yes, this is what I had in mind, more or less. Though, probably with the sign included in the output too.

Also, not sure if the pi should be changed to π here.

@DimitriiTrater
DimitriiTraterforce-pushed the atan2_correctness_docs branch 2 times, most recently from b4d0c32 to 7236b23CompareSeptember 21, 2025 01:14
@GrigorenkoPV

GrigorenkoPV commented Sep 24, 2025

Copy link
Copy Markdown
Contributor

LGTM, but let's wait for the assigned reviewer

Comment threadlibrary/std/src/num/f128.rs Outdated
Comment on lines +560 to +563
/// * `x = 0`, `y = 0`: `0`
/// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
/// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
/// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
/// * `x >= +0`, `y >= +0`: `[+0, +pi/2]`
/// * `x >= +0`, `y <= -0`: `[-pi/2, -0]`
/// * `x <= -0`, `y >= +0`: `[+pi/2, +pi]`
/// * `x <= -0`, `y <= -0`: `[-pi, -pi/2]`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the mathematical representation is helpful to keep for the intuition. Maybe a table format would work nicely?

/// | `x` | `y` | Equivalent | Range |/// |---------|---------|---------------|--------------|/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |/// ...

Basically a combination of the piecewise bit from https://en.wikipedia.org/wiki/Atan2#Definition_and_computation with the format of https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Domains.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're here, would you mind also adding a note about how self and other map to x and y? The (y, x) argument order can be a bit surprising.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With your approach, I can suggest this:

 /// | `x` | `y` | Equivalent | Range |
/// |---------|---------|-------------------|---------------|
/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |
/// | `>= +0` | `<= -0` | `arctan(y/x)` | `[-pi/2, -0]` |
/// | `<= -0` | `>= +0` | `arctan(y/x) + pi`| `[+pi/2, +pi]`|
/// | `<= -0` | `<= -0` | `arctan(y/x) - pi`| `[-pi, -pi/2]`|

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing. And equivalent here is not a true for x, y in this inequalities.
I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Ah yeah, totally overlooked that.

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing.

What specifically? The current PR already makes use of +/-0, this seems reasonable to me.

I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

"Definition" seems reasonable to me. Or maybe "Piecewise Definition".

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated PR, "Piecewise Definition" - really good.

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

So, what's next?

@tgross35

Copy link
Copy Markdown
Member

So, what's next?

Me getting a chance to circle back :)

Looks excellent! Thank you for the updates, and @GrigorenkoPV for reviewing this.

@bors r+ rollup

@bors

bors commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit d834935 has been approved by tgross35

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 3, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #144908 (Fix doctest output json)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147190 (std: `sys::net` cleanups)
- #147245 (only replace the intended comma in pattern suggestions)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147269 (Add regression test for 123953)
- #147277 (Extract common logic for iterating over features)
- #147280 (Return to needs-llvm-components being info-only)
- #147292 (Respect `-Z` unstable options in `rustdoc --test`)
- #147300 (Add xtensa arch to object file creation)
r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT )
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147309 (Add documentation about unwinding to wasm targets)
- #147315 (bless autodiff batching test)
- #147323 (Fix top level ui tests check in tidy)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 11 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 10 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit baea20b into rust-lang:masterOct 4, 2025
10 checks passed
@rustbotrustbot added this to the 1.92.0 milestone Oct 4, 2025
rust-timer added a commit that referenced this pull request Oct 4, 2025
Rollup merge of #146451 - DimitriiTrater:atan2_correctness_docs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixes#136275
github-actionsBot pushed a commit to model-checking/verify-rust-std that referenced this pull request Oct 9, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

f64::atan2 documentation error

5 participants

@DimitriiTrater@rustbot@GrigorenkoPV@tgross35@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix atan2 inaccuracy in documentation by DimitriiTrater · Pull Request #146451 · rust-lang/rust · GitHub
Skip to content

Fix atan2 inaccuracy in documentation - #146451

Merged
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs
Oct 4, 2025
Merged

Fix atan2 inaccuracy in documentation#146451
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs

Conversation

@DimitriiTrater

@DimitriiTraterDimitriiTrater commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Fixes#136275

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 11, 2025
@rustbot

Copy link
Copy Markdown
Collaborator

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@GrigorenkoPVGrigorenkoPV left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make more sense to rephrase the existing part in terms of >= +0.0 and <= -0.0 instead of adding a new section?

View changes since this review

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

If you take into account the signs of zeros in the function definition, then it will not make mathematical sense.
Signs of zeros in this context make sense only if we are talking about IEEE-754.
If you do it the way you say, then I need to remove the mathematical definition of the function from arctan and leave only the areas of incoming and outgoing values.

@DimitriiTrater

DimitriiTrater commented Sep 12, 2025

Copy link
Copy Markdown
ContributorAuthor

I can suggest this:
x >= +0, y >= +0: [0, π/2]
x <= -0, y >= +0: [π/2, π]
x >= +0, y <= -0: [-π/2, 0]
x <= -0, y <= -0: [-π, -π/2]

@GrigorenkoPV what do you think?

@GrigorenkoPV

Copy link
Copy Markdown
Contributor

Yes, this is what I had in mind, more or less. Though, probably with the sign included in the output too.

Also, not sure if the pi should be changed to π here.

@DimitriiTrater
DimitriiTraterforce-pushed the atan2_correctness_docs branch 2 times, most recently from b4d0c32 to 7236b23CompareSeptember 21, 2025 01:14
@GrigorenkoPV

GrigorenkoPV commented Sep 24, 2025

Copy link
Copy Markdown
Contributor

LGTM, but let's wait for the assigned reviewer

Comment threadlibrary/std/src/num/f128.rs Outdated
Comment on lines +560 to +563
/// * `x = 0`, `y = 0`: `0`
/// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
/// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
/// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
/// * `x >= +0`, `y >= +0`: `[+0, +pi/2]`
/// * `x >= +0`, `y <= -0`: `[-pi/2, -0]`
/// * `x <= -0`, `y >= +0`: `[+pi/2, +pi]`
/// * `x <= -0`, `y <= -0`: `[-pi, -pi/2]`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the mathematical representation is helpful to keep for the intuition. Maybe a table format would work nicely?

/// | `x` | `y` | Equivalent | Range |/// |---------|---------|---------------|--------------|/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |/// ...

Basically a combination of the piecewise bit from https://en.wikipedia.org/wiki/Atan2#Definition_and_computation with the format of https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Domains.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're here, would you mind also adding a note about how self and other map to x and y? The (y, x) argument order can be a bit surprising.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With your approach, I can suggest this:

 /// | `x` | `y` | Equivalent | Range |
/// |---------|---------|-------------------|---------------|
/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |
/// | `>= +0` | `<= -0` | `arctan(y/x)` | `[-pi/2, -0]` |
/// | `<= -0` | `>= +0` | `arctan(y/x) + pi`| `[+pi/2, +pi]`|
/// | `<= -0` | `<= -0` | `arctan(y/x) - pi`| `[-pi, -pi/2]`|

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing. And equivalent here is not a true for x, y in this inequalities.
I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Ah yeah, totally overlooked that.

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing.

What specifically? The current PR already makes use of +/-0, this seems reasonable to me.

I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

"Definition" seems reasonable to me. Or maybe "Piecewise Definition".

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated PR, "Piecewise Definition" - really good.

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

So, what's next?

@tgross35

Copy link
Copy Markdown
Member

So, what's next?

Me getting a chance to circle back :)

Looks excellent! Thank you for the updates, and @GrigorenkoPV for reviewing this.

@bors r+ rollup

@bors

bors commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit d834935 has been approved by tgross35

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 3, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #144908 (Fix doctest output json)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147190 (std: `sys::net` cleanups)
- #147245 (only replace the intended comma in pattern suggestions)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147269 (Add regression test for 123953)
- #147277 (Extract common logic for iterating over features)
- #147280 (Return to needs-llvm-components being info-only)
- #147292 (Respect `-Z` unstable options in `rustdoc --test`)
- #147300 (Add xtensa arch to object file creation)
r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT )
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147309 (Add documentation about unwinding to wasm targets)
- #147315 (bless autodiff batching test)
- #147323 (Fix top level ui tests check in tidy)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 11 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 10 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit baea20b into rust-lang:masterOct 4, 2025
10 checks passed
@rustbotrustbot added this to the 1.92.0 milestone Oct 4, 2025
rust-timer added a commit that referenced this pull request Oct 4, 2025
Rollup merge of #146451 - DimitriiTrater:atan2_correctness_docs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixes#136275
github-actionsBot pushed a commit to model-checking/verify-rust-std that referenced this pull request Oct 9, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

f64::atan2 documentation error

5 participants

@DimitriiTrater@rustbot@GrigorenkoPV@tgross35@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Fix atan2 inaccuracy in documentation by DimitriiTrater · Pull Request #146451 · rust-lang/rust · GitHub
Skip to content

Fix atan2 inaccuracy in documentation - #146451

Merged
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs
Oct 4, 2025
Merged

Fix atan2 inaccuracy in documentation#146451
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs

Conversation

@DimitriiTrater

@DimitriiTraterDimitriiTrater commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Fixes#136275

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 11, 2025
@rustbot

Copy link
Copy Markdown
Collaborator

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@GrigorenkoPVGrigorenkoPV left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make more sense to rephrase the existing part in terms of >= +0.0 and <= -0.0 instead of adding a new section?

View changes since this review

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

If you take into account the signs of zeros in the function definition, then it will not make mathematical sense.
Signs of zeros in this context make sense only if we are talking about IEEE-754.
If you do it the way you say, then I need to remove the mathematical definition of the function from arctan and leave only the areas of incoming and outgoing values.

@DimitriiTrater

DimitriiTrater commented Sep 12, 2025

Copy link
Copy Markdown
ContributorAuthor

I can suggest this:
x >= +0, y >= +0: [0, π/2]
x <= -0, y >= +0: [π/2, π]
x >= +0, y <= -0: [-π/2, 0]
x <= -0, y <= -0: [-π, -π/2]

@GrigorenkoPV what do you think?

@GrigorenkoPV

Copy link
Copy Markdown
Contributor

Yes, this is what I had in mind, more or less. Though, probably with the sign included in the output too.

Also, not sure if the pi should be changed to π here.

@DimitriiTrater
DimitriiTraterforce-pushed the atan2_correctness_docs branch 2 times, most recently from b4d0c32 to 7236b23CompareSeptember 21, 2025 01:14
@GrigorenkoPV

GrigorenkoPV commented Sep 24, 2025

Copy link
Copy Markdown
Contributor

LGTM, but let's wait for the assigned reviewer

Comment threadlibrary/std/src/num/f128.rs Outdated
Comment on lines +560 to +563
/// * `x = 0`, `y = 0`: `0`
/// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
/// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
/// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
/// * `x >= +0`, `y >= +0`: `[+0, +pi/2]`
/// * `x >= +0`, `y <= -0`: `[-pi/2, -0]`
/// * `x <= -0`, `y >= +0`: `[+pi/2, +pi]`
/// * `x <= -0`, `y <= -0`: `[-pi, -pi/2]`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the mathematical representation is helpful to keep for the intuition. Maybe a table format would work nicely?

/// | `x` | `y` | Equivalent | Range |/// |---------|---------|---------------|--------------|/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |/// ...

Basically a combination of the piecewise bit from https://en.wikipedia.org/wiki/Atan2#Definition_and_computation with the format of https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Domains.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're here, would you mind also adding a note about how self and other map to x and y? The (y, x) argument order can be a bit surprising.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With your approach, I can suggest this:

 /// | `x` | `y` | Equivalent | Range |
/// |---------|---------|-------------------|---------------|
/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |
/// | `>= +0` | `<= -0` | `arctan(y/x)` | `[-pi/2, -0]` |
/// | `<= -0` | `>= +0` | `arctan(y/x) + pi`| `[+pi/2, +pi]`|
/// | `<= -0` | `<= -0` | `arctan(y/x) - pi`| `[-pi, -pi/2]`|

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing. And equivalent here is not a true for x, y in this inequalities.
I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Ah yeah, totally overlooked that.

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing.

What specifically? The current PR already makes use of +/-0, this seems reasonable to me.

I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

"Definition" seems reasonable to me. Or maybe "Piecewise Definition".

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated PR, "Piecewise Definition" - really good.

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

So, what's next?

@tgross35

Copy link
Copy Markdown
Member

So, what's next?

Me getting a chance to circle back :)

Looks excellent! Thank you for the updates, and @GrigorenkoPV for reviewing this.

@bors r+ rollup

@bors

bors commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit d834935 has been approved by tgross35

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 3, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #144908 (Fix doctest output json)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147190 (std: `sys::net` cleanups)
- #147245 (only replace the intended comma in pattern suggestions)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147269 (Add regression test for 123953)
- #147277 (Extract common logic for iterating over features)
- #147280 (Return to needs-llvm-components being info-only)
- #147292 (Respect `-Z` unstable options in `rustdoc --test`)
- #147300 (Add xtensa arch to object file creation)
r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT )
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147309 (Add documentation about unwinding to wasm targets)
- #147315 (bless autodiff batching test)
- #147323 (Fix top level ui tests check in tidy)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 11 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 10 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit baea20b into rust-lang:masterOct 4, 2025
10 checks passed
@rustbotrustbot added this to the 1.92.0 milestone Oct 4, 2025
rust-timer added a commit that referenced this pull request Oct 4, 2025
Rollup merge of #146451 - DimitriiTrater:atan2_correctness_docs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixes#136275
github-actionsBot pushed a commit to model-checking/verify-rust-std that referenced this pull request Oct 9, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

f64::atan2 documentation error

5 participants

@DimitriiTrater@rustbot@GrigorenkoPV@tgross35@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix atan2 inaccuracy in documentation by DimitriiTrater · Pull Request #146451 · rust-lang/rust · GitHub
Skip to content

Fix atan2 inaccuracy in documentation - #146451

Merged
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs
Oct 4, 2025
Merged

Fix atan2 inaccuracy in documentation#146451
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs

Conversation

@DimitriiTrater

@DimitriiTraterDimitriiTrater commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Fixes#136275

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 11, 2025
@rustbot

Copy link
Copy Markdown
Collaborator

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@GrigorenkoPVGrigorenkoPV left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make more sense to rephrase the existing part in terms of >= +0.0 and <= -0.0 instead of adding a new section?

View changes since this review

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

If you take into account the signs of zeros in the function definition, then it will not make mathematical sense.
Signs of zeros in this context make sense only if we are talking about IEEE-754.
If you do it the way you say, then I need to remove the mathematical definition of the function from arctan and leave only the areas of incoming and outgoing values.

@DimitriiTrater

DimitriiTrater commented Sep 12, 2025

Copy link
Copy Markdown
ContributorAuthor

I can suggest this:
x >= +0, y >= +0: [0, π/2]
x <= -0, y >= +0: [π/2, π]
x >= +0, y <= -0: [-π/2, 0]
x <= -0, y <= -0: [-π, -π/2]

@GrigorenkoPV what do you think?

@GrigorenkoPV

Copy link
Copy Markdown
Contributor

Yes, this is what I had in mind, more or less. Though, probably with the sign included in the output too.

Also, not sure if the pi should be changed to π here.

@DimitriiTrater
DimitriiTraterforce-pushed the atan2_correctness_docs branch 2 times, most recently from b4d0c32 to 7236b23CompareSeptember 21, 2025 01:14
@GrigorenkoPV

GrigorenkoPV commented Sep 24, 2025

Copy link
Copy Markdown
Contributor

LGTM, but let's wait for the assigned reviewer

Comment threadlibrary/std/src/num/f128.rs Outdated
Comment on lines +560 to +563
/// * `x = 0`, `y = 0`: `0`
/// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
/// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
/// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
/// * `x >= +0`, `y >= +0`: `[+0, +pi/2]`
/// * `x >= +0`, `y <= -0`: `[-pi/2, -0]`
/// * `x <= -0`, `y >= +0`: `[+pi/2, +pi]`
/// * `x <= -0`, `y <= -0`: `[-pi, -pi/2]`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the mathematical representation is helpful to keep for the intuition. Maybe a table format would work nicely?

/// | `x` | `y` | Equivalent | Range |/// |---------|---------|---------------|--------------|/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |/// ...

Basically a combination of the piecewise bit from https://en.wikipedia.org/wiki/Atan2#Definition_and_computation with the format of https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Domains.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're here, would you mind also adding a note about how self and other map to x and y? The (y, x) argument order can be a bit surprising.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With your approach, I can suggest this:

 /// | `x` | `y` | Equivalent | Range |
/// |---------|---------|-------------------|---------------|
/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |
/// | `>= +0` | `<= -0` | `arctan(y/x)` | `[-pi/2, -0]` |
/// | `<= -0` | `>= +0` | `arctan(y/x) + pi`| `[+pi/2, +pi]`|
/// | `<= -0` | `<= -0` | `arctan(y/x) - pi`| `[-pi, -pi/2]`|

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing. And equivalent here is not a true for x, y in this inequalities.
I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Ah yeah, totally overlooked that.

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing.

What specifically? The current PR already makes use of +/-0, this seems reasonable to me.

I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

"Definition" seems reasonable to me. Or maybe "Piecewise Definition".

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated PR, "Piecewise Definition" - really good.

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

So, what's next?

@tgross35

Copy link
Copy Markdown
Member

So, what's next?

Me getting a chance to circle back :)

Looks excellent! Thank you for the updates, and @GrigorenkoPV for reviewing this.

@bors r+ rollup

@bors

bors commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit d834935 has been approved by tgross35

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 3, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #144908 (Fix doctest output json)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147190 (std: `sys::net` cleanups)
- #147245 (only replace the intended comma in pattern suggestions)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147269 (Add regression test for 123953)
- #147277 (Extract common logic for iterating over features)
- #147280 (Return to needs-llvm-components being info-only)
- #147292 (Respect `-Z` unstable options in `rustdoc --test`)
- #147300 (Add xtensa arch to object file creation)
r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT )
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147309 (Add documentation about unwinding to wasm targets)
- #147315 (bless autodiff batching test)
- #147323 (Fix top level ui tests check in tidy)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 11 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 10 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit baea20b into rust-lang:masterOct 4, 2025
10 checks passed
@rustbotrustbot added this to the 1.92.0 milestone Oct 4, 2025
rust-timer added a commit that referenced this pull request Oct 4, 2025
Rollup merge of #146451 - DimitriiTrater:atan2_correctness_docs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixes#136275
github-actionsBot pushed a commit to model-checking/verify-rust-std that referenced this pull request Oct 9, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

f64::atan2 documentation error

5 participants

@DimitriiTrater@rustbot@GrigorenkoPV@tgross35@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix atan2 inaccuracy in documentation by DimitriiTrater · Pull Request #146451 · rust-lang/rust · GitHub
Skip to content

Fix atan2 inaccuracy in documentation - #146451

Merged
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs
Oct 4, 2025
Merged

Fix atan2 inaccuracy in documentation#146451
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs

Conversation

@DimitriiTrater

@DimitriiTraterDimitriiTrater commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Fixes#136275

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 11, 2025
@rustbot

Copy link
Copy Markdown
Collaborator

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@GrigorenkoPVGrigorenkoPV left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make more sense to rephrase the existing part in terms of >= +0.0 and <= -0.0 instead of adding a new section?

View changes since this review

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

If you take into account the signs of zeros in the function definition, then it will not make mathematical sense.
Signs of zeros in this context make sense only if we are talking about IEEE-754.
If you do it the way you say, then I need to remove the mathematical definition of the function from arctan and leave only the areas of incoming and outgoing values.

@DimitriiTrater

DimitriiTrater commented Sep 12, 2025

Copy link
Copy Markdown
ContributorAuthor

I can suggest this:
x >= +0, y >= +0: [0, π/2]
x <= -0, y >= +0: [π/2, π]
x >= +0, y <= -0: [-π/2, 0]
x <= -0, y <= -0: [-π, -π/2]

@GrigorenkoPV what do you think?

@GrigorenkoPV

Copy link
Copy Markdown
Contributor

Yes, this is what I had in mind, more or less. Though, probably with the sign included in the output too.

Also, not sure if the pi should be changed to π here.

@DimitriiTrater
DimitriiTraterforce-pushed the atan2_correctness_docs branch 2 times, most recently from b4d0c32 to 7236b23CompareSeptember 21, 2025 01:14
@GrigorenkoPV

GrigorenkoPV commented Sep 24, 2025

Copy link
Copy Markdown
Contributor

LGTM, but let's wait for the assigned reviewer

Comment threadlibrary/std/src/num/f128.rs Outdated
Comment on lines +560 to +563
/// * `x = 0`, `y = 0`: `0`
/// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
/// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
/// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
/// * `x >= +0`, `y >= +0`: `[+0, +pi/2]`
/// * `x >= +0`, `y <= -0`: `[-pi/2, -0]`
/// * `x <= -0`, `y >= +0`: `[+pi/2, +pi]`
/// * `x <= -0`, `y <= -0`: `[-pi, -pi/2]`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the mathematical representation is helpful to keep for the intuition. Maybe a table format would work nicely?

/// | `x` | `y` | Equivalent | Range |/// |---------|---------|---------------|--------------|/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |/// ...

Basically a combination of the piecewise bit from https://en.wikipedia.org/wiki/Atan2#Definition_and_computation with the format of https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Domains.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're here, would you mind also adding a note about how self and other map to x and y? The (y, x) argument order can be a bit surprising.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With your approach, I can suggest this:

 /// | `x` | `y` | Equivalent | Range |
/// |---------|---------|-------------------|---------------|
/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |
/// | `>= +0` | `<= -0` | `arctan(y/x)` | `[-pi/2, -0]` |
/// | `<= -0` | `>= +0` | `arctan(y/x) + pi`| `[+pi/2, +pi]`|
/// | `<= -0` | `<= -0` | `arctan(y/x) - pi`| `[-pi, -pi/2]`|

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing. And equivalent here is not a true for x, y in this inequalities.
I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Ah yeah, totally overlooked that.

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing.

What specifically? The current PR already makes use of +/-0, this seems reasonable to me.

I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

"Definition" seems reasonable to me. Or maybe "Piecewise Definition".

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated PR, "Piecewise Definition" - really good.

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

So, what's next?

@tgross35

Copy link
Copy Markdown
Member

So, what's next?

Me getting a chance to circle back :)

Looks excellent! Thank you for the updates, and @GrigorenkoPV for reviewing this.

@bors r+ rollup

@bors

bors commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit d834935 has been approved by tgross35

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 3, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #144908 (Fix doctest output json)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147190 (std: `sys::net` cleanups)
- #147245 (only replace the intended comma in pattern suggestions)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147269 (Add regression test for 123953)
- #147277 (Extract common logic for iterating over features)
- #147280 (Return to needs-llvm-components being info-only)
- #147292 (Respect `-Z` unstable options in `rustdoc --test`)
- #147300 (Add xtensa arch to object file creation)
r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT )
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147309 (Add documentation about unwinding to wasm targets)
- #147315 (bless autodiff batching test)
- #147323 (Fix top level ui tests check in tidy)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 11 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 10 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit baea20b into rust-lang:masterOct 4, 2025
10 checks passed
@rustbotrustbot added this to the 1.92.0 milestone Oct 4, 2025
rust-timer added a commit that referenced this pull request Oct 4, 2025
Rollup merge of #146451 - DimitriiTrater:atan2_correctness_docs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixes#136275
github-actionsBot pushed a commit to model-checking/verify-rust-std that referenced this pull request Oct 9, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

f64::atan2 documentation error

5 participants

@DimitriiTrater@rustbot@GrigorenkoPV@tgross35@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Fix atan2 inaccuracy in documentation by DimitriiTrater · Pull Request #146451 · rust-lang/rust · GitHub
Skip to content

Fix atan2 inaccuracy in documentation - #146451

Merged
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs
Oct 4, 2025
Merged

Fix atan2 inaccuracy in documentation#146451
bors merged 1 commit into
rust-lang:masterfrom
DimitriiTrater:atan2_correctness_docs

Conversation

@DimitriiTrater

@DimitriiTraterDimitriiTrater commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Fixes#136275

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 11, 2025
@rustbot

Copy link
Copy Markdown
Collaborator

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@GrigorenkoPVGrigorenkoPV left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make more sense to rephrase the existing part in terms of >= +0.0 and <= -0.0 instead of adding a new section?

View changes since this review

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

If you take into account the signs of zeros in the function definition, then it will not make mathematical sense.
Signs of zeros in this context make sense only if we are talking about IEEE-754.
If you do it the way you say, then I need to remove the mathematical definition of the function from arctan and leave only the areas of incoming and outgoing values.

@DimitriiTrater

DimitriiTrater commented Sep 12, 2025

Copy link
Copy Markdown
ContributorAuthor

I can suggest this:
x >= +0, y >= +0: [0, π/2]
x <= -0, y >= +0: [π/2, π]
x >= +0, y <= -0: [-π/2, 0]
x <= -0, y <= -0: [-π, -π/2]

@GrigorenkoPV what do you think?

@GrigorenkoPV

Copy link
Copy Markdown
Contributor

Yes, this is what I had in mind, more or less. Though, probably with the sign included in the output too.

Also, not sure if the pi should be changed to π here.

@DimitriiTrater
DimitriiTraterforce-pushed the atan2_correctness_docs branch 2 times, most recently from b4d0c32 to 7236b23CompareSeptember 21, 2025 01:14
@GrigorenkoPV

GrigorenkoPV commented Sep 24, 2025

Copy link
Copy Markdown
Contributor

LGTM, but let's wait for the assigned reviewer

Comment threadlibrary/std/src/num/f128.rs Outdated
Comment on lines +560 to +563
/// * `x = 0`, `y = 0`: `0`
/// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
/// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
/// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
/// * `x >= +0`, `y >= +0`: `[+0, +pi/2]`
/// * `x >= +0`, `y <= -0`: `[-pi/2, -0]`
/// * `x <= -0`, `y >= +0`: `[+pi/2, +pi]`
/// * `x <= -0`, `y <= -0`: `[-pi, -pi/2]`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the mathematical representation is helpful to keep for the intuition. Maybe a table format would work nicely?

/// | `x` | `y` | Equivalent | Range |/// |---------|---------|---------------|--------------|/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |/// ...

Basically a combination of the piecewise bit from https://en.wikipedia.org/wiki/Atan2#Definition_and_computation with the format of https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Domains.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're here, would you mind also adding a note about how self and other map to x and y? The (y, x) argument order can be a bit surprising.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With your approach, I can suggest this:

 /// | `x` | `y` | Equivalent | Range |
/// |---------|---------|-------------------|---------------|
/// | `>= +0` | `>= +0` | `arctan(y/x)` | `[+0, +π/2]` |
/// | `>= +0` | `<= -0` | `arctan(y/x)` | `[-pi/2, -0]` |
/// | `<= -0` | `>= +0` | `arctan(y/x) + pi`| `[+pi/2, +pi]`|
/// | `<= -0` | `<= -0` | `arctan(y/x) - pi`| `[-pi, -pi/2]`|

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing. And equivalent here is not a true for x, y in this inequalities.
I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand. It's already has note about self (y), other(x).

Ah yeah, totally overlooked that.

But from a mathematical point of view, the signed zero here has no meaning, so it looks a bit confusing.

What specifically? The current PR already makes use of +/-0, this seems reasonable to me.

I can change "Equivalent" to "Expression used" or "Definition" so this will more reliable.

"Definition" seems reasonable to me. Or maybe "Piecewise Definition".

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated PR, "Piecewise Definition" - really good.

@DimitriiTrater

Copy link
Copy Markdown
ContributorAuthor

So, what's next?

@tgross35

Copy link
Copy Markdown
Member

So, what's next?

Me getting a chance to circle back :)

Looks excellent! Thank you for the updates, and @GrigorenkoPV for reviewing this.

@bors r+ rollup

@bors

bors commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit d834935 has been approved by tgross35

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 3, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #144908 (Fix doctest output json)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147190 (std: `sys::net` cleanups)
- #147245 (only replace the intended comma in pattern suggestions)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147269 (Add regression test for 123953)
- #147277 (Extract common logic for iterating over features)
- #147280 (Return to needs-llvm-components being info-only)
- #147292 (Respect `-Z` unstable options in `rustdoc --test`)
- #147300 (Add xtensa arch to object file creation)
r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
@ZalatharZalathar mentioned this pull request Oct 4, 2025
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 14 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT )
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147309 (Add documentation about unwinding to wasm targets)
- #147315 (bless autodiff batching test)
- #147323 (Fix top level ui tests check in tidy)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 11 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 4, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
bors added a commit that referenced this pull request Oct 4, 2025
Rollup of 10 pull requests
Successful merges:
- #142670 (Document fully-qualified syntax in `as`' keyword doc)
- #145685 (add CloneFromCell and Cell::get_cloned)
- #146330 (Bump unicode_data and printables to version 17.0.0)
- #146451 (Fix atan2 inaccuracy in documentation)
- #146479 (add mem::conjure_zst)
- #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos)
- #147190 (std: `sys::net` cleanups)
- #147251 (Do not assert that a change in global cache only happens when concurrent)
- #147280 (Return to needs-llvm-components being info-only)
- #147315 (bless autodiff batching test)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit baea20b into rust-lang:masterOct 4, 2025
10 checks passed
@rustbotrustbot added this to the 1.92.0 milestone Oct 4, 2025
rust-timer added a commit that referenced this pull request Oct 4, 2025
Rollup merge of #146451 - DimitriiTrater:atan2_correctness_docs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixes#136275
github-actionsBot pushed a commit to model-checking/verify-rust-std that referenced this pull request Oct 9, 2025
…ocs, r=tgross35
Fix atan2 inaccuracy in documentation
Fixesrust-lang#136275
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

f64::atan2 documentation error

5 participants

@DimitriiTrater@rustbot@GrigorenkoPV@tgross35@bors