Cookbook/Numbers
< Cookbook
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Numbers in Haskell can be of the type Int, Integer, Float, Double, or Rational
.
Rounding numbers
Problem | Solution | Examples |
---|---|---|
rounding | round | round 3.4 --> 3
round 3.5 --> 4
|
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
|
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, most-significant first
bitRange :: Bits a => a -> Int -> Int -> [Bool]
bitRange n lo hi = foldl' (\l -> \x -> testBit n x : l) [] [lo..hi]
-- Extract all bits, most-significant 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
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.2246063538223773e-16
|