我在项目 euler 做问题 62并想出了以下测试数字是否是立方的:
isInt x = x == fromInteger (round x)
isCube x= isInt $ x**(1/3)
但由于浮点错误,它返回不正确的结果:
*Main> isCube (384^3)
False
有没有办法实现更可靠的立方体测试?
在旁注中,这是我的解决方案的其余部分,由于类型接口错误,它不起作用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]
我需要做什么来修复错误?
No instances for (Floating Integer, RealFrac Integer)
arising from a use of `isCube' at prob62.hs:10:44-49
也欢迎任何优化;-)