Funktion um Quadratzahlen festzustellen
-
Ich brauche eine Funktion die feststellt, ob eine übergebene Zahl eine Quadratzahl ist (sprich: Wurzel = Integer).
Ich hab folgendes geschrieben:
int issqrt(unsigned long zahl) { double check = sqrt(zahl); check -= (unsigned long)sqrt(zahl); if ( check < 0.0000000000001 && check > -0.0000000000001 ) return 1; else return 0; }
Meine Frage ist, ob das auch eleganter geht und ohne diesen Vergleich, weil ja theoretisch Zahlen bei denen ein Rest von 0.0000000000000000232151 ect. als Quadratzahlen ausgewertet werden, obwohl es keine sind.
-
Kannst du nicht einfach check wieder quadrieren und dann mit zahl vergleichen? Oder hab ich dein Problem jetzt missverstanden?
-
Soviel ich weiß sind Vergleiche auf Gleichheit (==) beim Typ double sehr fehleranfällig aufgrund der internen Speicherung.
-
Klar. Nur: bei Brutus' Vorschlag vergleichst Du gar keine doubles, sondern ints.
-
*lichtaufgeh*
Wo habe ich nur mein Gehirn...ahh!