8000 gh-135853: add `math.signbit` by picnixz · Pull Request #135877 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

gh-135853: add math.signbit #135877

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jun 28, 2025
Merged

Conversation

picnixz
Copy link
Member
@picnixz picnixz commented Jun 24, 2025

cc @mdickinson @skirpichev @rhettinger

I made the choice of returning True/False like numpy rather than the nonzero value itself as in C. If you want me to have another function that returns a boolean and keep signbit as in C, please tell me.


📚 Documentation preview 📚: https://cpython-previews--135877.org.readthedocs.build/

Copy link
Contributor
@skirpichev skirpichev left a comment

Choose a reason for hiding this comment

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

LGTM

Some nitpicks, based on wording in the C17.

@picnixz picnixz requested a review from skirpichev June 24, 2025 09:29
@picnixz picnixz force-pushed the feat/math/signbit-135853 branch from b406151 to f6a55ce Compare June 24, 2025 09:55
Copy link
Member
@vstinner vstinner left a comment

Choose a reason for hiding this comment

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

LGTM.

IMO it's ok to cast C signint() int result into a Python boolean, since it's unlikely that the signbit() will return values others than 0 and 1 in the future. The manual page says:

RETURN VALUE
       The signbit() macro returns nonzero if the sign of x is negative; other-
       wise it returns zero.

@picnixz
Copy link
Member Author
picnixz commented Jun 27, 2025

IMO it's ok to cast C signint() int result into a Python boolean, since it's unlikely that the signbit() will return values others than 0 and 1 in the future. The manual page says:

Actually, signbit does return something else than 0/1 (in C) at least on some platforms, but that's what all predicate functions do in math.h (they are all specified as returning nonzero value if the condition holds). However, in C++, they return true/false. Note that https://en.cppreference.com/w/c/numeric/math/signbit shows an example where signbit() returns 128 for a negative zero.

However, since we return booleans for isfinite() etc, I also returned a boolean for signbit() (and in practice, people don't care about the return value, they only care about the test)

@picnixz picnixz self-assigned this Jun 27, 2025
@picnixz picnixz merged commit 42ccac2 into python:main Jun 28, 2025
44 checks passed
@picnixz picnixz deleted the feat/math/signbit-135853 branch June 28, 2025 12:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants
0