Hello all, I am a new learner, and i am trying to write a function to calculate factorial of a natural number: (I use ghc 6.4, window xp) fac :: Int -> Int fac n | n == 0 = 1 | n > 0 = fac (n-1) * n | otherwise = 0 this works when n < 14 and result is 1278945280, when n > 14 the answer is not right n = 15 result is 2004310016. I know it is maybe because of overflow. So i calclate 2^32, 2^64, 2^128 the result correct and is much bigger as 14!,Why? 2^n use some big integer or my implementation of n! is not correct, I'm really confused. Someone can help me? Thanks Ting Wang
Hi, the difference is that you restrict your function to Int, whereas the default type is Integer. See: http://www.haskell.org/onlinereport/decls.html#sect4.3.4 and http://www.haskell.org/onlinereport/basic.html#sect6.4 hth, claus btw, you can ask ghci to give you the type of each expression you evaluate: Prelude> :set +t Prelude> 2^128 340282366920938463463374607431768211456 cmTypeOfName: it it :: Integer Prelude> 2^128 :: Int 0 cmTypeOfName: it it :: Int Prelude> maxBound :: Int 2147483647 cmTypeOfName: it it :: Int Prelude> maxBound :: Integer <interactive>:1:0: No instance for (Bounded Integer) arising from use of `maxBound' at <interactive>:1:0-7 Probable fix: add an instance declaration for (Bounded Integer) In the expression: maxBound :: Integer In the definition of `it': it = maxBound :: Integer ----- Original Message ----- From: "ting wang" <tting.wang@gmail.com> To: <haskell@haskell.org> Sent: Saturday, April 16, 2005 12:03 AM Subject: [Haskell] big integer in haskell
Hello all, I am a new learner, and i am trying to write a function to calculate factorial of a natural number: (I use ghc 6.4, window xp) fac :: Int -> Int fac n | n == 0 = 1 | n > 0 = fac (n-1) * n | otherwise = 0 this works when n < 14 and result is 1278945280, when n > 14 the answer is not right n = 15 result is 2004310016. I know it is maybe because of overflow. So i calclate 2^32, 2^64, 2^128 the result correct and is much bigger as 14!,Why? 2^n use some big integer or my implementation of n! is not correct, I'm really confused.
Someone can help me?
Thanks Ting Wang _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell
participants (2)
-
Claus Reinke -
ting wang