Cookbook/Numbers

From HaskellWiki
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 a given number round
round 3.4      --> 3
round 3.5      --> 4
round 2.5      --> 2
finding the nearest integer greater than or equal to a given number ceiling
ceiling 3.0    --> 3
ceiling 3.1    --> 4
finding the nearest integer less than or equal to a given number floor
floor 3.0      --> 3
floor 3.9      --> 3
finding the nearest integer between zero and a given number 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-4.12.0.0 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

-- Extract a range of bits, most-significant first
bitRange :: Bits a => a -> Int -> Int -> [Bool]
bitRange n lo hi = reverse . map (testBit n) [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 Data.Complex
1.0 :+ 0.0        --> 1.0 :+ 0.0
creating a complex number from polar components mkPolar
import Data.Complex
mkPolar 1.0 pi    --> (-1.0) :+ 1.2246063538223773e-16
adding complex numbers
import Data.Complex
(1 :+ 1) + (2 :+ 2) --> 3.0 :+ 3.0