Cookbook/Numbers: Difference between revisions

From HaskellWiki
mNo edit summary
m (Fixed broken links)
 
Line 10: Line 10:
|-
|-
|  rounding a given number
|  rounding a given number
|  [http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:round round]
|  [http://haskell.org/ghc/docs/latest/html/libraries/base-4.12.0.0/Prelude.html#v:round round]
|<haskell>
|<haskell>
round 3.4      --> 3
round 3.4      --> 3
Line 18: Line 18:
|-
|-
|  finding the nearest integer greater than or equal to a given number
|  finding the nearest integer greater than or equal to a given number
|  [http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v%3Aceiling ceiling]
|  [http://haskell.org/ghc/docs/latest/html/libraries/base-4.12.0.0/Prelude.html#v%3Aceiling ceiling]
|<haskell>
|<haskell>
ceiling 3.0    --> 3
ceiling 3.0    --> 3
Line 25: Line 25:
|-
|-
|  finding the nearest integer less than or equal to a given number
|  finding the nearest integer less than or equal to a given number
|  [http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v%3Afloor floor]
|  [http://haskell.org/ghc/docs/latest/html/libraries/base-4.12.0.0/Prelude.html#v%3Afloor floor]
|<haskell>
|<haskell>
floor 3.0      --> 3
floor 3.0      --> 3
Line 32: Line 32:
|-
|-
|  finding the nearest integer between zero and a given number
|  finding the nearest integer between zero and a given number
|  [http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v%3Atruncate truncate]
|  [http://haskell.org/ghc/docs/latest/html/libraries/base-4.12.0.0/Prelude.html#v%3Atruncate truncate]
|<haskell>
|<haskell>
truncate 3.0          -->  3
truncate 3.0          -->  3
Line 44: Line 44:
<haskell>
<haskell>
log 2.718281828459045  --> 1.0
log 2.718281828459045  --> 1.0
logBase 10 10000      --> 4.0
logBase-4.12.0.0 10 10000      --> 4.0
</haskell>
</haskell>


Line 84: Line 84:
|-
|-
|  creating a complex number from real and imaginary rectangular components
|  creating a complex number from real and imaginary rectangular components
|  [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-4.12.0.0/Data-Complex.html#v%3A%3A%2B (:+)]
|<haskell>
|<haskell>
import Data.Complex
import Data.Complex
Line 91: Line 91:
|-
|-
|  creating a complex number from polar components
|  creating a complex number from polar components
|  [http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Complex.html#v%3AmkPolar mkPolar]
|  [http://haskell.org/ghc/docs/latest/html/libraries/base-4.12.0.0/Data-Complex.html#v%3AmkPolar mkPolar]
|<haskell>
|<haskell>
import Data.Complex
import Data.Complex

Latest revision as of 21:03, 6 January 2019

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