math.sqrt() ungenau für große Zahlen?
Verfasst: Dienstag 13. Oktober 2009, 17:45
Guten Abend!
Ich versuche mich seit geraumer Zeit am Problem #66. Ich habe zur Bestimmung des x-Wertes die Gleichung umgeformt:Ich inkrementiere nun solange y, bis ich ein ganzzahliges Ergebnis für x erhalte:Für die Beispielfälle in der Problemstellung kriege ich auch schnell die richtigen Ergebnisse. Als Zielwert für D erhalte ich 617, wobei x = 1592796237, und y = 64123562. Das Ergebnis ist jedoch falsch, und ich habe mal kurz in der Shell überprüft:Jetzt stehe ich ziemlich auf dem Schlauch! Warum sind die Ergebnisse nicht äquivalent? Ich kann mir ja kaum vorstellen, dass math.sqrt() fehlerhaft ist, aber ich finde in meiner Umformung sowie der Überprüfung keinen Fehler. Ich würde mich freuen, wenn mich jemand erhellen könnte.
P.S.: Ich suche natürlich nicht die Lösung des eigentlichen Problems, sondern Hilfestellung hinsichtlich meines Ansatzes..
Ich versuche mich seit geraumer Zeit am Problem #66. Ich habe zur Bestimmung des x-Wertes die Gleichung umgeformt:
Code: Alles auswählen
x^2 - D * y^2 = 1
<=> x = sqrt(1 + D * y^2)
Code: Alles auswählen
from math import sqrt
D = 1000
store = 0
for d in xrange(2, D + 1):
# continue if d is square
if sqrt(d)**2 == d:
continue
y = 1
while True:
x = sqrt(1 + d * y**2)
if int(x) == x:
if x > store:
store = x
print "D = %i (x is %i, y is %i)" % (d, x, y)
break
y += 1
Code: Alles auswählen
>>> x = 1592796237
>>> y = 64123562
>>> D = 617
>>> sqrt(1 + D * y**2)
1592796237.0
>>> x == _
True
>>> x**2 - D * y**2
421L
P.S.: Ich suche natürlich nicht die Lösung des eigentlichen Problems, sondern Hilfestellung hinsichtlich meines Ansatzes..