Data.Fixed
| Авторские права | (c) Ashley Yakeley 2005 2006 2009 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддержка | Ashley Yakeley <ashley@semantic.org> |
| Стабильность | стабильная |
| Переносимость | переносимая |
| Безопасный Haskell | Надёжный |
| Язык | 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
newtype Fixed (a :: k) Источник
Тип дробных чисел с фиксированной точкой. Параметр типа указывает количество цифр дробной части и должен быть экземпляром типа HasResolution.
Примеры
MkFixed 12345 :: Fixed E3
Экземпляры
| Lift (Fixed a :: Type) Источник | С версии: base-4.21.0.0 |
| (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 |
| HasResolution a => RealFrac (Fixed a) Source | Since: base-2.1 |
| HasResolution a => Show (Fixed a) Source | Since: base-2.1 |
| Eq (Fixed a) Source | Since: base-2.1 |
| Ord (Fixed a) Source | Since: base-2.1 |
class HasResolution (a :: k) where Source
Типы, которые могут быть использованы в качестве аргумента разрешения для типа-конструктора Fixed, должны реализовывать тип-класс HasResolution.
Методы
resolution :: p a -> Integer Source
Предоставьте разрешение для дробного числа с фиксированной точкой.
Экземпляры
| KnownNat n => HasResolution (n :: Nat) Источник | Например, |
Определено в Data.Fixed Методыresolution :: p n -> Integer Источник | |
| HasResolution E0 Источник | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E0 -> Integer Источник | |
| HasResolution E1 Источник | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E1 -> Integer Источник | |
| HasResolution E12 Источник | С версии: base-2.1 |
Определено в Data.Fixed Методыresolution :: p E12 -> Integer Источник | |
| HasResolution E2 Источник | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E2 -> Integer Источник | |
| HasResolution E3 Источник | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E3 -> Integer Источник | |
| HasResolution E6 Источник | С версии: base-2.1 |
Определено в Data.Fixed Методыresolution :: p E6 -> Integer Источник | |
| HasResolution E9 Источник | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E9 -> 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
Разрешение 1, работает так же, как Integer.
Экземпляры
| HasResolution E0 Источник | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E0 -> Integer Источник | |
Разрешение 1, работает так же, как Integer.
Примеры
>>> show (MkFixed 12345 :: Fixed E0) "12345.0"
>>> show (MkFixed 12345 :: Uni) "12345.0"
1/10
Разрешение 10^-1 = 0,1
Примеры реализации
| HasResolution E1 Source | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E1 -> Integer Source | |
Разрешение 10^-1 = 0,1
Примеры
>>> show (MkFixed 12345 :: Fixed E1) "1234.5"
>>> show (MkFixed 12345 :: Deci) "1234.5"
1/100
Разрешение 10^-2 = 0,01, удобно для многих валют
Примеры реализации
| HasResolution E2 Source | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E2 -> Integer Source | |
Разрешение 10^-2 = 0,01, удобно для многих валют
Примеры
>>> show (MkFixed 12345 :: Fixed E2) "123.45"
>>> show (MkFixed 12345 :: Centi) "123.45"
1/1 000
Разрешение 10^-3 = 0,001
Примеры реализации
| HasResolution E3 Source | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E3 -> Integer Source | |
Разрешение 10^-3 = 0,001
Примеры
>>> show (MkFixed 12345 :: Fixed E3) "12.345"
>>> show (MkFixed 12345 :: Milli) "12.345"
1/1 000 000
Разрешение 10^-6 = 0,000001
Примеры реализации
| HasResolution E6 Source | С версии: base-2.1 |
Определено в Data.Fixed Методыresolution :: p E6 -> Integer Source | |
Разрешение 10^-6 = 0,000001
Примеры
>>> show (MkFixed 12345 :: Fixed E6) "0.012345"
>>> show (MkFixed 12345 :: Micro) "0.012345"
1/1 000 000 000
Разрешение 10^-9 = 0,000000001
Примеры реализации
| HasResolution E9 Source | С версии: base-4.1.0.0 |
Определено в Data.Fixed Методыresolution :: p E9 -> Integer Source | |
Разрешение 10^-9 = 0,000000001
Примеры
>>> show (MkFixed 12345 :: Fixed E9) "0.000012345"
>>> show (MkFixed 12345 :: Nano) "0.000012345"
1/1 000 000 000 000
Разрешение 10^-12 = 0,000000000001
Примеры использования
| HasResolution E12 Исходный код | С момента выпуска: base-2.1 |
Определено в Data.Fixed Методыresolution :: p E12 -> Целое число Исходный код | |
тип Pico = Fixed E12 Исходный код
Разрешение 10^-12 = 0.000000000001
Примеры
>>> show (MkFixed 12345 :: Fixed E12) "0.000000012345"
>>> show (MkFixed 12345 :: Pico) "0.000000012345"
Обобщенные функции для действительных чисел
div' :: (Действительное число a, Целочисленное b) => a -> a -> b Исходный код
Обобщение div на любой тип Real
mod' :: Действительное число a => a -> a -> a Исходный код
Обобщение mod на любой тип Real
divMod' :: (Действительное число a, Целочисленное 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.12.1/docs/libraries/base-4.21.0.0-8e62/Data-Fixed.html