
Hi guys, I'm working with Haskell for a little project at the university and I'm stuck with a problem. I'm trying to generate a random number in the interval [0.0,1.0]. It is straightforward for me to implement the function on ints: rand :: IO Int rand = do r <- newStdGen let (x1, r2) = randomR (0,1) r print x1 return x1 However, if I try to generate a Float instead, I always get an Arithmetic Overflow error that I can not understand. Code: rand :: IO Float rand = do r <- newStdGen let (x1, r2) = randomR (0.0::Float,1.0::Float) r print x1 return x1 Do you have any clue why this happens? Thanks in advance, -- Giorgio

Am Freitag 23 April 2010 15:33:43 schrieb Giorgio Stefanoni:
However, if I try to generate a Float instead, I always get an Arithmetic Overflow error that I can not understand.
Code:
rand :: IO Float rand = do r <- newStdGen let (x1, r2) = randomR (0.0::Float,1.0::Float) r print x1 return x1
Works here. And it should. Must be the implementation you use, though I can't imagine why it would screw up on this.
Do you have any clue why this happens?
Thanks in advance,

Works great here... Using ghci: Prelude> :m + Random Prelude Random> let rand :: (Num a,Random a) => IO a; rand = newStdGen
= return . fst . randomR (0,1) Prelude Random> rand :: IO Int 1 Prelude Random> rand :: IO Int 1 Prelude Random> rand :: IO Int 1 Prelude Random> rand :: IO Int 1 Prelude Random> rand :: IO Int 0 Prelude Random> rand :: IO Double 0.6897753065428174 Prelude Random> rand :: IO Float 0.6159074 Prelude Random>
El vie, 23-04-2010 a las 15:33 +0200, Giorgio Stefanoni escribió:
Hi guys,
I'm working with Haskell for a little project at the university and I'm stuck with a problem.
I'm trying to generate a random number in the interval [0.0,1.0]. It is straightforward for me to implement the function on ints:
rand :: IO Int rand = do r <- newStdGen let (x1, r2) = randomR (0,1) r
print x1 return x1
However, if I try to generate a Float instead, I always get an Arithmetic Overflow error that I can not understand.
Code: rand :: IO Float rand = do r <- newStdGen let (x1, r2) = randomR (0.0::Float,1.0::Float) r
print x1 return x1
Do you have any clue why this happens?
Thanks in advance,
-- Giorgio _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (3)
-
Daniel Fischer
-
Giorgio Stefanoni
-
MAN