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
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)
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
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!