Maison > Article > développement back-end > Existe-t-il un moyen infaillible de déterminer si un nombre est un carré parfait sans recourir à des calculs à virgule flottante ?
Comment vérifier si un nombre est un carré parfait : une plongée détaillée
Introduction
Déterminer si un nombre donné est un carré parfait est une opération mathématique courante. Un nombre est un carré parfait s’il peut être représenté comme le carré d’un nombre entier. Même si les calculs à virgule flottante utilisant des fonctions racine carrée peuvent sembler intuitifs, ils introduisent des inexactitudes potentielles. Les approches basées sur des nombres entiers offrent des solutions plus précises.
L'algorithme babylonien
Une méthode basée sur les nombres entiers s'inspire de l'algorithme babylonien pour le calcul de la racine carrée. La fonction Python suivante, is_square(), implémente cette approche :
def is_square(apositiveint): x = apositiveint // 2 seen = set([x]) while x * x != apositiveint: x = (x + (apositiveint // x)) // 2 if x in seen: return False seen.add(x) return True
Exemple de travail
Testons cette fonction :
for i in range(110, 130): print(i, is_square(i))
Cela imprimera l'état de quadrature de chaque nombre dans la plage spécifiée.
Gestion des grands entiers
Pour les grands entiers, cette méthode reste réalisable, car elle fonctionne entièrement sur des entiers et évite les limitations de l'arithmétique à virgule flottante. Par exemple, le code suivant vérifie si un grand entier est un carré parfait :
x = 12345678987654321234567 ** 2 for i in range(x, x+2): print(i, is_square(i))
Au-delà des calculs à virgule flottante
Bien que les calculs à virgule flottante soient pratiques, ils peuvent ne pas être fiables pour des contrôles précis de l'équerrage. Les approches basées sur des nombres entiers comme l'algorithme babylonien fournissent des résultats précis pour tout nombre positif, quelle que soit sa grandeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!