que estoy haciendo question 62 a Euler proyecto y se le ocurrió la siguiente para probar si un número es cúbica:raíz cúbica fiable en Haskell
isInt x = x == fromInteger (round x)
isCube x= isInt $ x**(1/3)
Pero debido a un error de punto flotante, devuelve resultados incorrectos:
*Main> isCube (384^3)
False
¿Existe alguna manera de implementar una prueba de cubo más confiable?
En una nota lateral, aquí está el resto de mi solución, que no funciona debido a un error de interfaz tipo de 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]
¿Qué necesito hacer para corregir el error?
No instances for (Floating Integer, RealFrac Integer)
arising from a use of `isCube' at prob62.hs:10:44-49
Cualquier optimizaciones también son bienvenidos ;-)
Gracias por la ayuda –