ich question 62 bei Project Euler tue und kam mit dem folgenden Test auf, ob eine Zahl kubisch ist:Zuverlässige Kubikwurzel in Haskell
isInt x = x == fromInteger (round x)
isCube x= isInt $ x**(1/3)
Aber aufgrund Gleitkommafehler, es falsche Ergebnisse zurückgibt:
*Main> isCube (384^3)
False
Gibt es eine Möglichkeit, einen zuverlässigeren Cube-Test zu implementieren?
An einer Nebennote, hier ist der Rest meiner Lösung, die nicht wegen eines Typ-Schnittstellenfehler auf filter (isCube) (perms n)
funktioniert:
cubes = [n^3|n<-[1..]]
perms n = map read $ permutations $ show n :: [Integer]
answer = head [n|n<-cubes,(length $ filter (isCube) (perms n)) == 5]
Was brauche ich, um den Fehler zu beheben, zu tun?
No instances for (Floating Integer, RealFrac Integer)
arising from a use of `isCube' at prob62.hs:10:44-49
Alle Optimierungen sind auch willkommen ;-)
Danke für die Hilfe –