Cookbook/Numbers

From HaskellWiki
Jump to navigation Jump to search

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.1    --> 4
ceiling 4.0    --> 4
finding the nearest integer less than or equal to x floor
floor 3.5      --> 3
floor 3.0      --> 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

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.2246063538223773e-16