# Cookbook/Numbers

### From HaskellWiki

< Cookbook(Difference between revisions)

m (→Rounding numbers: words) |
m |
||

Line 60: | Line 60: | ||

<haskell> |
<haskell> |
||

import Data.Bits |
import Data.Bits |
||

− | import Data.List (foldl') |
||

-- Extract a range of bits, most-significant first |
-- Extract a range of bits, most-significant first |
||

bitRange :: Bits a => a -> Int -> Int -> [Bool] |
bitRange :: Bits a => a -> Int -> Int -> [Bool] |
||

− | bitRange n lo hi = foldl' (\l -> \x -> testBit n x : l) [] [lo..hi] |
+ | bitRange n lo hi = reverse . map (testBit n) [lo..hi] |

-- Extract all bits, most-significant first |
-- Extract all bits, most-significant first |

## Latest revision as of 10:14, 13 December 2009

Numbers in Haskell can be of the typeInt, Integer, Float, Double, or Rational

## Contents |

## [edit] 1 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 |

## [edit] 2 Taking logarithms

log 2.718281828459045 --> 1.0 logBase 10 10000 --> 4.0

## [edit] 3 Generating random numbers

import System.Random main = do gen <- getStdGen let ns = randoms gen :: [Int] print $ take 10 ns

## [edit] 4 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

## [edit] 5 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 |