Data.Fixed
| Авторские права | (c) Ashley Yakeley 2005 2006 2009 |
|---|---|
| Лицензия | в стиле BSD (см. файл libraries/base/LICENSE) |
| Сопровождающий | Ashley Yakeley <ashley@semantic.org> |
| Стабильность | стабильная |
| Переносимость | переносимый |
| Безопасный Haskell | Trustworthy |
| Язык | Haskell2010 |
Описание
Этот модуль определяет тип Fixed для работы с арифметикой с фиксированной точкой. Арифметика с фиксированной точкой представляет дробные числа с фиксированным количеством цифр в дробной части. Это отличается от поведения типов чисел с плавающей точкой Float и Double, поскольку количество цифр в дробной части чисел Float и Double зависит от величины числа. Арифметика с фиксированной точкой часто используется в финансовой математике для представления десятичных валют.
Тип Fixed используется для дробных чисел с фиксированной точкой, которые внутри представлены как Integer. Тип Fixed принимает один параметр, который должен реализовывать класс типов HasResolution, задающий количество цифр в дробной части. Этот модуль предоставляет экземпляры класса типов HasResolution для произвольных натуральных чисел на уровне типов, а также для некоторых канонических важных представлений с фиксированной точкой.
Этот модуль также содержит обобщения div, mod и divMod для работы с любым экземпляром Real.
Автоматическое преобразование между различными Fixed можно выполнять с помощью realToFrac. Учтите, что при преобразовании к типу с меньшей точностью число будет усечено, что приведёт к потере информации.
>>> realToFrac (0.123456 :: Pico) :: Milli 0.123
Тип Fixed
Тип дробных чисел с фиксированной точкой. Параметр типа задаёт количество цифр в дробной части и должен быть экземпляром класса типов HasResolution.
Примеры
MkFixed 12345 :: Fixed E3
Экземпляры
| Lift (Fixed a :: Type) Исходный код | С версии: base-4.21.0.0 |
Определён в Data.Fixed | |
| Eq (Fixed a) Исходный код | С версии: base-2.1 |
Определён в Data.Fixed Методы(==) :: Fixed a -> Fixed a -> Bool Исходный код (/=) :: Fixed a -> Fixed a -> Bool Исходный код | |
| Ord (Fixed a) Исходный код | С версии: base-2.1 |
Определён в Data.Fixed Методыcompare :: Fixed a -> Fixed a -> Ordering Исходный код (<) :: Fixed a -> Fixed a -> Bool Исходный код (<=) :: Fixed a -> Fixed a -> Bool Исходный код (>) :: Fixed a -> Fixed a -> Bool Исходный код (>=) :: Fixed a -> Fixed a -> Bool Исходный код max :: Fixed a -> Fixed a -> Fixed a Исходный код min :: Fixed a -> Fixed a -> Fixed a Исходный код | |
| (Typeable k, Typeable a) => Data (Fixed a) Исходный код | С версии: base-4.1.0.0 |
Определён в Data.Fixed Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Fixed a -> c (Fixed a) Исходный код gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Fixed a) Исходный код toConstr :: Fixed a -> Constr Исходный код dataTypeOf :: Fixed a -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Fixed a)) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Fixed a)) Исходный код gmapT :: (forall b. Data b => b -> b) -> Fixed a -> Fixed a Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Fixed a -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Fixed a -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> Fixed a -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> Fixed a -> u Исходный код gmapM :: Monad m => (forall d. Data d => d -> m d) -> Fixed a -> m (Fixed a) Исходный код gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Fixed a -> m (Fixed a) Исходный код gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Fixed a -> m (Fixed a) Исходный код | |
| Enum (Fixed a) Исходный код |
Следует помнить, что для числовых типов >>> succ (0.000 :: Milli) 0.001 и аналогично >>> pred (0.000 :: Milli) -0.001 Другими словами, >>> succ (0.000000000000 :: Pico) 0.000000000001 и аналогично >>> pred (0.000000000000 :: Pico) -0.000000000001 Об этом стоит помнить при определении арифметических последовательностей [1..10] :: [Pico] вычисляется как Однако это неверно. Напротив, подобно приведённым выше реализациям [1.000000000000, 1.00000000001, 1.00000000002, ..., 10.000000000000] и содержит С версии: base-2.1 |
Определён в Data.Fixed Методыsucc :: Fixed a -> Fixed a Исходный код pred :: Fixed a -> Fixed a Исходный код toEnum :: Int -> Fixed a Исходный код fromEnum :: Fixed a -> Int Исходный код enumFrom :: Fixed a -> [Fixed a] Исходный код enumFromThen :: Fixed a -> Fixed a -> [Fixed a] Исходный код enumFromTo :: Fixed a -> Fixed a -> [Fixed a] Исходный код enumFromThenTo :: Fixed a -> Fixed a -> Fixed a -> [Fixed a] Исходный код | |
| HasResolution a => Num (Fixed a) Исходный код |
Умножение не является ни ассоциативным, ни дистрибутивным: >>> (0.2 * 0.6 :: Deci) * 0.9 == 0.2 * (0.6 * 0.9) False >>> (0.1 + 0.1 :: Deci) * 0.5 == 0.1 * 0.5 + 0.1 * 0.5 False С версии: base-2.1 |
Определён в Data.Fixed Методы(+) :: Fixed a -> Fixed a -> Fixed a Исходный код (-) :: Fixed a -> Fixed a -> Fixed a Исходный код (*) :: Fixed a -> Fixed a -> Fixed a Исходный код negate :: Fixed a -> Fixed a Исходный код abs :: Fixed a -> Fixed a Исходный код signum :: Fixed a -> Fixed a Исходный код fromInteger :: Integer -> Fixed a Исходный код | |
| HasResolution a => Read (Fixed a) Исходный код | С версии: base-4.3.0.0 |
Определён в Data.Fixed МетодыreadsPrec :: Int -> ReadS (Fixed a) Исходный код readList :: ReadS [Fixed a] Исходный код readPrec :: ReadPrec (Fixed a) Исходный код readListPrec :: ReadPrec [Fixed a] Исходный код | |
| HasResolution a => Fractional (Fixed a) Исходный код | С версии: base-2.1 |
Определён в Data.Fixed Методы(/) :: Fixed a -> Fixed a -> Fixed a Исходный код recip :: Fixed a -> Fixed a Исходный код fromRational :: Rational -> Fixed a Исходный код | |
| HasResolution a => Real (Fixed a) Исходный код | С версии: base-2.1 |
Определён в Data.Fixed МетодыtoRational :: Fixed a -> Rational Исходный код | |
| HasResolution a => RealFrac (Fixed a) Исходный код | С версии: base-2.1 |
Определён в Data.Fixed МетодыproperFraction :: Integral b => Fixed a -> (b, Fixed a) Исходный код truncate :: Integral b => Fixed a -> b Исходный код round :: Integral b => Fixed a -> b Исходный код ceiling :: Integral b => Fixed a -> b Исходный код floor :: Integral b => Fixed a -> b Исходный код | |
| HasResolution a => Show (Fixed a) Исходный код | С версии: base-2.1 |
Определено в Data.Fixed МетодыshowsPrec :: Int -> Fixed a -> ShowS Исходный код show :: Fixed a -> String Исходный код showList :: [Fixed a] -> ShowS Исходный код |
class HasResolution (a :: k) where Исходный код
Типы, которые можно использовать в качестве аргумента разрешения конструктора типа Fixed, должны реализовывать класс типов HasResolution.
Методы
resolution :: p a -> Integer Исходный код
Задаёт разрешение дробного числа с фиксированной точкой.
Экземпляры
showFixed :: forall {k} (a :: k). HasResolution a => Bool -> Fixed a -> String Исходный код
Первый аргумент указывает, следует ли удалять конечные нули
Примеры
>>> showFixed True (MkFixed 10000 :: Fixed E3) "10"
>>> showFixed False (MkFixed 10000 :: Fixed E3) "10.000"
Разрешение / коэффициенты масштабирования
Разрешение, или коэффициент масштабирования, определяет количество цифр в дробной части.
| Разрешение | Коэффициент масштабирования | Синоним для "Fixed EX" | show (12345 :: Fixed EX) |
|---|---|---|---|
| E0 | 1/1 | Uni | 12345.0 |
| E1 | 1/10 | Deci | 1234.5 |
| E2 | 1/100 | Centi | 123.45 |
| E3 | 1/1 000 | Milli | 12.345 |
| E6 | 1/1 000 000 | Micro | 0.012345 |
| E9 | 1/1 000 000 000 | Nano | 0.000012345 |
| E12 | 1/1 000 000 000 000 | Pico | 0.000000012345 |
1/1
data E0 Исходный код
Разрешение 1; работает так же, как Integer.
Экземпляры
| HasResolution E0 Исходный код | Начиная с: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E0 -> Integer Исходный код | |
type Uni = Fixed E0 Исходный код
Разрешение 1; работает так же, как Integer.
Примеры
>>> show (MkFixed 12345 :: Fixed E0) "12345.0"
>>> show (MkFixed 12345 :: Uni) "12345.0"
1/10
data E1 Исходный код
Разрешение 10^-1 = .1
Экземпляры
| HasResolution E1 Исходный код | Начиная с: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E1 -> Integer Исходный код | |
type Deci = Fixed E1 Исходный код
Разрешение 10^-1 = .1
Примеры
>>> show (MkFixed 12345 :: Fixed E1) "1234.5"
>>> show (MkFixed 12345 :: Deci) "1234.5"
1/100
data E2 Исходный код
Разрешение 10^-2 = .01, подходит для многих денежных валют
Экземпляры
| HasResolution E2 Исходный код | Начиная с: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E2 -> Integer Исходный код | |
type Centi = Fixed E2 Исходный код
Разрешение 10^-2 = .01, подходит для многих денежных валют
Примеры
>>> show (MkFixed 12345 :: Fixed E2) "123.45"
>>> show (MkFixed 12345 :: Centi) "123.45"
1/1 000
data E3 Исходный код
Разрешение 10^-3 = .001
Экземпляры
| HasResolution E3 Исходный код | Начиная с: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E3 -> Integer Исходный код | |
type Milli = Fixed E3 Исходный код
Разрешение 10^-3 = .001
Примеры
>>> show (MkFixed 12345 :: Fixed E3) "12.345"
>>> show (MkFixed 12345 :: Milli) "12.345"
1/1 000 000
data E6 Исходный код
Разрешение 10^-6 = .000001
Экземпляры
| HasResolution E6 Исходный код | Начиная с: base-2.1 |
Определено в Data.Fixed Методыresolution :: p E6 -> Integer Исходный код | |
type Micro = Fixed E6 Исходный код
Разрешение 10^-6 = .000001
Примеры
>>> show (MkFixed 12345 :: Fixed E6) "0.012345"
>>> show (MkFixed 12345 :: Micro) "0.012345"
1/1 000 000 000
data E9 Исходный код
Разрешение 10^-9 = .000000001
Экземпляры
| HasResolution E9 Исходный код | Начиная с: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E9 -> Integer Исходный код | |
type Nano = Fixed E9 Исходный код
Разрешение 10^-9 = .000000001
Примеры
>>> show (MkFixed 12345 :: Fixed E9) "0.000012345"
>>> show (MkFixed 12345 :: Nano) "0.000012345"
1/1 000 000 000 000
data E12 Исходный код
Разрешение 10^-12 = .000000000001
Экземпляры
| HasResolution E12 Исходный код | Начиная с: base-2.1 |
Определено в Data.Fixed Методыresolution :: p E12 -> Integer Исходный код | |
type Pico = Fixed E12 Исходный код
Разрешение 10^-12 = .000000000001
Примеры
>>> show (MkFixed 12345 :: Fixed E12) "0.000000012345"
>>> show (MkFixed 12345 :: Pico) "0.000000012345"
Обобщённые функции для вещественных чисел
div' :: (Real a, Integral b) => a -> a -> b Исходный код
Обобщение div на любой экземпляр Real
mod' :: Real a => a -> a -> a Исходный код
Обобщение mod на любой экземпляр Real
divMod' :: (Real a, Integral b) => a -> a -> (b, a) Исходный код
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/Data-Fixed.html