Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

continued_fraction uses float division, producing invalid terms for large integers and raising OverflowError

Ouverte Adaptée aux débutants
#15,655 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 2 jours

@trleo y travaille déjà.

Depuis le 28/10/2026.

  • #15660 par @trleo — ouverte

Évaluation

Difficulté
1/5
Temps estimé
Moins d'une heure
Accessibilité débutants
88/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
tooling

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

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de TheAlgorithms/Python

Toutes les issues de TheAlgorithms/Python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.