Difference between revisions of "Cookbook/Numbers"
From HaskellWiki
< Cookbook
(Added the "round 2.5" example and "truncate") |
(Added "adding complex numbers") |
||
Line 87: | Line 87: | ||
| [http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Complex.html#v%3A%3A%2B (:+)] | | [http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Complex.html#v%3A%3A%2B (:+)] | ||
|<haskell> | |<haskell> | ||
− | import Complex | + | import Data.Complex |
1.0 :+ 0.0 --> 1.0 :+ 0.0 | 1.0 :+ 0.0 --> 1.0 :+ 0.0 | ||
</haskell> | </haskell> | ||
Line 94: | Line 94: | ||
| [http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Complex.html#v%3AmkPolar mkPolar] | | [http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Complex.html#v%3AmkPolar mkPolar] | ||
|<haskell> | |<haskell> | ||
− | import Complex | + | import Data.Complex |
mkPolar 1.0 pi --> (-1.0) :+ 1.2246063538223773e-16 | mkPolar 1.0 pi --> (-1.0) :+ 1.2246063538223773e-16 | ||
+ | </haskell> | ||
+ | |- | ||
+ | | adding complex numbers | ||
+ | | | ||
+ | |<haskell> | ||
+ | import Data.Complex | ||
+ | (1 :+ 1) + (2 :+ 2) --> 3.0 :+ 3.0 | ||
</haskell> | </haskell> | ||
|} | |} |
Revision as of 14:49, 6 August 2009
Numbers in Haskell can be of the type Int, Integer, Float, Double, or Rational
.
Contents
Rounding numbers
Problem | Solution | Examples |
---|---|---|
rounding | round | round 3.4 --> 3
round 3.5 --> 4
round 2.5 --> 2
|
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
|
finding the nearest integer between zero and x
|
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 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 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
|