sto facendo question 62 a Project Euler e si avvicinò con la seguente per verificare se un numero è cubica:affidabile radice cubica in Haskell
isInt x = x == fromInteger (round x)
isCube x= isInt $ x**(1/3)
Ma a causa di un errore in virgola mobile, restituisce risultati non corretti:
*Main> isCube (384^3)
False
C'è un modo per implementare un test del cubo più affidabile?
Su un lato nota, qui è il resto della mia soluzione, che non funziona a causa di un errore di interfaccia di tipo on filter (isCube) (perms n)
:
cubes = [n^3|n<-[1..]]
perms n = map read $ permutations $ show n :: [Integer]
answer = head [n|n<-cubes,(length $ filter (isCube) (perms n)) == 5]
Che cosa devo fare per correggere l'errore?
No instances for (Floating Integer, RealFrac Integer)
arising from a use of `isCube' at prob62.hs:10:44-49
eventuali ottimizzazioni sono i benvenuti ;-)
Grazie per l'aiuto –