Die Bestimmung, ob eine Zahl ein perfektes Quadrat ist, mag einfach erscheinen, aber sich auf Gleitkommaoperationen zu verlassen, kann unzuverlässig sein. Für die Genauigkeit ist es entscheidend, ganzzahlige Ansätze wie den unten dargestellten zu verwenden.
Der Algorithmus nutzt die babylonische Methode der Quadratwurzelberechnung. Es schätzt die Quadratwurzel iterativ, indem es den Durchschnitt der aktuellen Schätzung und der Zahl dividiert durch diese Schätzung berechnet.
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
Diese Methode konvergiert nachweislich für jede positive ganze Zahl und wird angehalten, wenn die Zahl nicht perfekt ist Quadrat, da die Schleife auf unbestimmte Zeit andauern würde.
Hier ist ein Beispiel:
for i in range(110, 130): print i, is_square(i)
Ausgabe:
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
Wie oben gesehen, identifiziert der Algorithmus korrekt perfekte Quadrate, B. 120 und 125, wobei nicht perfekte Quadrate wie 111 und 122 ausgeschlossen werden.
Bei großen ganzen Zahlen können Gleitkomma-Ungenauigkeiten erheblich werden und möglicherweise zu fehlerhaften Ergebnissen führen. Um Präzision zu gewährleisten, ist es ratsam, für diese Aufgabe keine Gleitkommaoperationen zu verwenden.
Das obige ist der detaillierte Inhalt vonWie kann man genau bestimmen, ob eine Zahl ein perfektes Quadrat ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!