Cookbook/Numbers
From HaskellWiki
< Cookbook
Revision as of 14:39, 6 August 2009 by HenkJan van Tuyl (talk  contribs) (Added the "round 2.5" example and "truncate")
Numbers in Haskell can be of the type Int, Integer, Float, Double, or Rational
.
Contents
Rounding numbers
Problem  Solution  Examples 

rounding  round  round 3.4 > 3
round 3.5 > 4
round 2.5 > 2

finding the nearest integer greater than or equal to x

ceiling  ceiling 3.0 > 3
ceiling 3.1 > 4

finding the nearest integer less than or equal to x

floor  floor 3.0 > 3
floor 3.9 > 3

finding the nearest integer between zero and x

truncate  truncate 3.0 > 3
truncate 3.9 > 3
truncate (negate 3.0) > 3
truncate (negate 3.9) > 3

Taking logarithms
log 2.718281828459045 > 1.0
logBase 10 10000 > 4.0
Generating random numbers
import System.Random
main = do
gen < getStdGen
let ns = randoms gen :: [Int]
print $ take 10 ns
Binary representation of numbers
import Data.Bits
import Data.List (foldl')
 Extract a range of bits, mostsignificant first
bitRange :: Bits a => a > Int > Int > [Bool]
bitRange n lo hi = foldl' (\l > \x > testBit n x : l) [] [lo..hi]
 Extract all bits, mostsignificant first
bits :: Bits a => a > [Bool]
bits n = bitRange n 0 (bitSize n  1)
 Display a number in binary, including leading zeroes.
 c.f. Numeric.showHex
showBits :: Bits a => a > ShowS
showBits = showString . map (\b > if b then '1' else '0') . bits
Using complex numbers
Problem  Solution  Examples 

creating a complex number from real and imaginary rectangular components  (:+)  import Complex
1.0 :+ 0.0 > 1.0 :+ 0.0

creating a complex number from polar components  mkPolar  import Complex
mkPolar 1.0 pi > (1.0) :+ 1.2246063538223773e16
