Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Data.Ratio ((%))
- import GHC.Real
- -- 10 decimal places
- newtype Fixed = Fixed Integer deriving (Eq, Ord, Enum)
- instance Show Fixed where
- show (Fixed a) = show whole ++ "." ++ trailing where
- (whole, part) = a `divMod` (10 ^ 10)
- digits = show part
- trailing = replicate (10 - (length digits)) '0' ++ digits
- instance Num Fixed where
- fromInteger n = Fixed (n * 10 ^ 10)
- Fixed a + Fixed b = Fixed (a + b)
- Fixed a - Fixed b = Fixed (a - b)
- Fixed a * Fixed b = Fixed ((a * b) `div` 10 ^ 10)
- abs (Fixed a) = Fixed (abs a)
- signum (Fixed a) = fromInteger (signum a)
- instance Real Fixed where
- toRational (Fixed a) = a % (10 ^ 10)
- instance Integral Fixed where
- toInteger (Fixed a) = a `div` 10 ^ 10
- Fixed a `quotRem` Fixed b = (fromInteger q, Fixed r) where
- (q, r) = a `quotRem` b
- instance Fractional Fixed where
- fromRational (e :% d) = fromInteger e / fromInteger d
- Fixed a / Fixed b = Fixed (a * 10 ^ 10 `div` b)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement