Maison > développement back-end > Tutoriel Python > Existe-t-il un moyen infaillible de déterminer si un nombre est un carré parfait sans recourir à des calculs à virgule flottante ?

Existe-t-il un moyen infaillible de déterminer si un nombre est un carré parfait sans recourir à des calculs à virgule flottante ?

Linda Hamilton
Libérer: 2024-11-09 01:47:02
original
678 Les gens l'ont consulté

Is there a foolproof way to determine if a number is a perfect square without relying on floating-point computations?

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
Copier après la connexion

Exemple de travail

Testons cette fonction :

for i in range(110, 130):
    print(i, is_square(i))
Copier après la connexion

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))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal