# Cookbook/Numbers

From HaskellWiki

Numbers in Haskell can be of the type `Int, Integer, Float, Double, or Rational`

.

## Contents

## 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
``` |