[Haskell-beginners] Generating Random Float

MAN elviotoccalino at gmail.com
Fri Apr 23 11:23:14 EDT 2010


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 at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners




More information about the Beginners mailing list