Comment déterminer avec précision si un nombre est un carré parfait ?

Barbara Streisand
Libérer: 2024-11-08 19:54:02
original
1043 Les gens l'ont consulté

How to Accurately Determine if a Number is a Perfect Square?

Trouver des carrés parfaits : une méthode complète

Déterminer si un nombre est un carré parfait peut sembler simple, mais s'appuyer sur des opérations à virgule flottante peut s'avérer peu fiable. Pour plus de précision, il est crucial d'utiliser des approches basées sur des nombres entiers comme celle présentée ci-dessous.

L'algorithme exploite la méthode babylonienne de calcul de racine carrée. Il estime de manière itérative la racine carrée en calculant la moyenne de l'estimation actuelle et le nombre divisé par cette estimation.

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

Il est prouvé que cette méthode converge pour tout entier positif et s'arrête si le nombre n'est pas parfait. carré, car la boucle se perpétuerait indéfiniment.

Voici un exemple :

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

Sortie :

110 False
111 False
112 False
113 False
114 False
115 False
116 False
117 False
118 False
119 False
120 True
121 True
122 False
123 False
124 False
125 True
126 False
127 False
128 False
129 True
Copier après la connexion

Comme vu ci-dessus, l'algorithme identifie correctement les carrés parfaits, tels que 120 et 125, tout en excluant les carrés non parfaits comme 111 et 122.

Pour les grands entiers, les inexactitudes en virgule flottante peuvent devenir importantes, conduisant potentiellement à des erreurs résultats. Pour garantir la précision, il est conseillé d'éviter d'utiliser des opérations à virgule flottante pour cette tâche.

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