X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FRatio.hs;h=22f3abeeeff8661ee1dc5a620db4d98e9abc1fff;hb=3116880983d3babec6675c2a27e300155f03040c;hp=37dd821cc24dde0676d053ab3b0e70c8fd71181d;hpb=2b09d1369ead1a675a916a3c928e0b72c169c3fe;p=ghc-base.git diff --git a/Data/Ratio.hs b/Data/Ratio.hs index 37dd821..22f3abe 100644 --- a/Data/Ratio.hs +++ b/Data/Ratio.hs @@ -5,7 +5,7 @@ -- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : libraries@haskell.org --- Stability : provisional +-- Stability : stable -- Portability : portable -- -- Standard functions on rational numbers @@ -39,15 +39,29 @@ import Prelude import GHC.Real -- The basic defns for Ratio #endif -#ifndef __HUGS__ +#ifdef __HUGS__ +import Hugs.Prelude(Ratio(..), (%), numerator, denominator) +#endif + +#ifdef __NHC__ +import Ratio (Ratio(..), (%), numerator, denominator, approxRational) +#else + -- ----------------------------------------------------------------------------- -- approxRational --- @approxRational@, applied to two real fractional numbers x and epsilon, --- returns the simplest rational number within epsilon of x. A rational --- number n%d in reduced form is said to be simpler than another n'%d' if --- abs n <= abs n' && d <= d'. Any real interval contains a unique --- simplest rational; here, for simplicity, we assume a closed rational +-- | 'approxRational', applied to two real fractional numbers @x@ and @epsilon@, +-- returns the simplest rational number within @epsilon@ of @x@. +-- A rational number @y@ is said to be /simpler/ than another @y'@ if +-- +-- * @'abs' ('numerator' y) <= 'abs' ('numerator' y')@, and +-- +-- * @'denominator' y <= 'denominator' y'@. +-- +-- Any real interval contains a unique simplest rational; +-- in particular, note that @0\/1@ is the simplest rational of all. + +-- Implementation details: Here, for simplicity, we assume a closed rational -- interval. If such an interval includes at least one whole number, then -- the simplest rational is the absolutely least whole number. Otherwise, -- the bounds are of the form q%1 + r%d and q%1 + r'%d', where abs r < d @@ -77,4 +91,4 @@ approxRational rat eps = simplest (rat-eps) (rat+eps) nd'' = simplest' d' r' d r n'' = numerator nd'' d'' = denominator nd'' -#endif /* __HUGS__ */ +#endif