continued_fraction uses float division, producing invalid terms for large integers and raising OverflowError
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 1/5
- Temps estimé
- Moins d'une heure
- Accessibilité débutants
- 88/100
Piste de recherche
Ouvre maths/continued_fraction.py et regarde la boucle qui calcule chaque terme : le quotient est obtenu avec floor(numerator / denominator), ce qui convertit d'abord en float. Reproduis avec l'extrait dans l'issue, remplace cette étape par une division entière par floor afin que des fractions exactes de toute taille fonctionnent, et vérifie que continued_fraction(Fraction(2**53 + 3)) renvoie [9007199254740995] et que le cas 10**400 / 3 ne déborde plus. Terminé signifie que les deux exemples se comportent correctement et que les fractions négatives donnent toujours une fraction continue correcte.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Repository commit
6e03a48579ca212a08b36be00378f887dc41a003
Python version (python --version)
Python 3.11.0, macOS
Dependencies version (pip freeze)
The reproduction uses only Python's standard library; no third-party dependencies are involved.
Expected behavior
continued_fraction(Fraction(2**53 + 3)) should return [9007199254740995], the continued fraction of that integer. Large exact fractions should not fail merely because they exceed floating-point range.
Actual behavior
Run from the repository root:
from fractions import Fraction
from maths.continued_fraction import continued_fraction
print(continued_fraction(Fraction(2**53 + 3)))
try:
print(continued_fraction(Fraction(10**400, 3)))
except OverflowError as exc:
print(type(exc).__name__ + ':', exc)
Output:
[9007199254740996, -1]
OverflowError: integer division result too large for a float
The first result represents the same integer numerically, but is not the regular continued fraction: the trailing term is negative because the first quotient was rounded upward.
In maths/continued_fraction.py, floor(numerator / denominator) first converts the integer ratio to a float. This loses precision for sufficiently large values and can overflow. Computing the quotient directly with integer floor division (numerator // denominator) preserves exact arithmetic and also handles negative fractions.
I searched existing issues and PRs for continued fraction and continued_fraction; I did not find an existing report of this problem.
- Langage dominant
- Python
- Étoiles
- 226k
- Forks
- 51.3k
- Merge moyen
- 1 j 13 h
- PR mergées (30 j)
- 32
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de TheAlgorithms/Python
-
binomial_distribution overflows at 171 trials even when the result is representablePeut-être pris @landfvit l’a pris il y a 3 jours. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
TheAlgorithms/Python#15656 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
ciphers/base32.py and ciphers/base85.py encode Unicode code points instead of bytes: output diverges from the spec for non-ASCII, round-trips corrupt chars >= U+0400, arbitrary bytes crashPeut-être pris @Nate-br l’a pris il y a 5 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
TheAlgorithms/Python#15636 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
ciphers/des_ecb.py: encrypt/decrypt silently corrupts any character above U+00FF (round-trip fails)Peut-être pris @mohammedanasnakhuda l’a pris il y a 5 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
TheAlgorithms/Python#15634 ·
Les mainteneurs répondent en général sous 2 jours
-
other/password.py: alternative_password_generator ignores the requested length when the required characters exceed itPeut-être pris @raaj-2222 l’a pris il y a 6 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
TheAlgorithms/Python#15633 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
ciphers/base58.py is a copy of base64_cipher.py — no Base58 implementation exists in the filePeut-être pris @SakshiYeole l’a pris il y a 6 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 45/100
TheAlgorithms/Python#15637 ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de TheAlgorithms/Python
Issues similaires
-
ReadQwen3PaperTask5 rejects correct answers that differ only in order, case, or underscore formPeut-être pris @Kingpython123 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
Tongyi-MAI/MobileWorld#72 ·
-
_threads/application: Update typing annotations using `pyupgrade --py311-plus`Peut-être pris @gudnimg l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Health probes return 401 when authentication is enabled and the API is served under /orbPeut-être pris @fgogolli l’a pris aujourd’hui. Ouvertearea: api priority: p2 size: S type: bug
Difficulté 2/5 Une demi-journée Accessibilité débutants 75/100
finos/open-resource-broker#704 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
BCDA-APS/polar-bits#93 ·
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
GoogleCloudPlatform/gce-rescue#218 ·
Les mainteneurs répondent en général sous 2 jours