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 ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-09 01:47:02646parcourir

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

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!

Déclaration:
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