Spec-Zone.ru › Haskell 9

Data.Fixed

Авторские права (c) Ashley Yakeley 2005 2006 2009
Лицензия BSD-стиль (см. файл libraries/base/LICENSE)
Поддержка Ashley Yakeley <ashley@semantic.org>
Стабильность стабильная
Переносимость переносимая
Безопасный Haskell Надёжный
Язык Haskell2010

Содержание

  • Тип Fixed
  • Факторы разрешения/масштабирования
    • 1/1
    • 1/10
    • 1/100
    • 1/1 000
    • 1/1 000 000
    • 1/1 000 000 000
    • 1/1 000 000 000 000
  • Обобщённые функции над вещественными числами

Описание

Этот модуль определяет тип 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

Конструкторы

MkFixed Integer
Экземпляры
Подробности о экземплярах
Lift (Fixed a :: Type) Источник

С версии: base-4.21.0.0

Подробности о экземпляре

Определено в Data.Fixed

Методы

lift :: Quote m => Fixed a -> m Exp Источник

liftTyped :: forall (m :: Type -> Type). Quote m => Fixed a -> Code m (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 и pred обычно прибавляют и вычитают 1, соответственно. Это неверно в случае Fixed, функции следования и предшествования которых интуитивно возвращают «следующее» и «предыдущее» значения в перечислении. Результаты этих функций, таким образом, зависят от разрешения значения Fixed. Например, при перечислении значений с разрешением 10^-3 type Milli = Fixed E3,

>>> succ (0.000 :: Milli)
0.001

и аналогично

>>> pred (0.000 :: Milli)
-0.001

Другими словами, succ и pred увеличивают и уменьшают значение с фиксированной точностью на наименьшую величину, так что разрешение значения не изменяется. Например, 10^-12 - это наименьшая (положительная) величина, которая может быть добавлена к значению type Pico = Fixed E12 без изменения его разрешения, и поэтому

>>> succ (0.000000000000 :: Pico)
0.000000000001

и аналогично

>>> pred (0.000000000000 :: Pico)
-0.000000000001

Это стоит иметь в виду при определении Fixed арифметических последовательностей. В частности, вас можно простить за мысль, что последовательность

  [1..10] :: [Pico]

вычисляется как [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] :: [Pico].

Однако это неверно. Напротив, аналогично приведенным выше реализациям succ и pred, enumFromTo :: Pico -> Pico -> [Pico] имеет «шаг» 10^-12. Следовательно, список [1..10] :: [Pico] имеет вид

  [1.000000000000, 1.00000000001, 1.00000000002, ..., 10.000000000000]

и содержит 9 * 10^12 + 1 значений.

С версии: 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) Source

Since: base-2.1

Детали экземпляра

Определено в Data.Fixed

Методы

properFraction :: Integral b => Fixed a -> (b, Fixed a) Source

truncate :: Integral b => Fixed a -> b Source

round :: Integral b => Fixed a -> b Source

ceiling :: Integral b => Fixed a -> b Source

floor :: Integral b => Fixed a -> b Source

HasResolution a => Show (Fixed a) Source

Since: base-2.1

Детали экземпляра

Определено в Data.Fixed

Методы

showsPrec :: Int -> Fixed a -> ShowS Source

show :: Fixed a -> String Source

showList :: [Fixed a] -> ShowS Source

Eq (Fixed a) Source

Since: base-2.1

Детали экземпляра

Определено в Data.Fixed

Методы

(==) :: Fixed a -> Fixed a -> Bool Source

(/=) :: Fixed a -> Fixed a -> Bool Source

Ord (Fixed a) Source

Since: base-2.1

Детали экземпляра

Определено в Data.Fixed

Методы

compare :: Fixed a -> Fixed a -> Ordering Source

(<) :: Fixed a -> Fixed a -> Bool Source

(<=) :: Fixed a -> Fixed a -> Bool Source

(>) :: Fixed a -> Fixed a -> Bool Source

(>=) :: Fixed a -> Fixed a -> Bool Source

max :: Fixed a -> Fixed a -> Fixed a Source

min :: Fixed a -> Fixed a -> Fixed a Source

class HasResolution (a :: k) where Source

Типы, которые могут быть использованы в качестве аргумента разрешения для типа-конструктора Fixed, должны реализовывать тип-класс HasResolution.

Методы

resolution :: p a -> Integer Source

Предоставьте разрешение для дробного числа с фиксированной точкой.

Экземпляры
Подробности об экземплярах
KnownNat n => HasResolution (n :: Nat) Источник

Например, Fixed 1000 даст вам Fixed с разрешением 1000.

Подробности об экземпляре

Определено в 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

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 Source

Разрешение 10^-1 = 0,1

Примеры реализации
Подробности примеров реализации
HasResolution E1 Source

С версии: base-4.1.0.0

Подробности реализации

Определено в Data.Fixed

Методы

resolution :: p E1 -> Integer Source

type Deci = Fixed E1 Source

Разрешение 10^-1 = 0,1

Примеры

Развернуть
>>> show (MkFixed 12345 :: Fixed E1)
"1234.5"
>>> show (MkFixed 12345 :: Deci)
"1234.5"

1/100

data E2 Source

Разрешение 10^-2 = 0,01, удобно для многих валют

Примеры реализации
Подробности примеров реализации
HasResolution E2 Source

С версии: base-4.1.0.0

Подробности реализации

Определено в Data.Fixed

Методы

resolution :: p E2 -> Integer Source

type Centi = Fixed E2 Source

Разрешение 10^-2 = 0,01, удобно для многих валют

Примеры

Развернуть
>>> show (MkFixed 12345 :: Fixed E2)
"123.45"
>>> show (MkFixed 12345 :: Centi)
"123.45"

1/1 000

data E3 Source

Разрешение 10^-3 = 0,001

Примеры реализации
Подробности примеров реализации
HasResolution E3 Source

С версии: base-4.1.0.0

Подробности реализации

Определено в Data.Fixed

Методы

resolution :: p E3 -> Integer Source

type Milli = Fixed E3 Source

Разрешение 10^-3 = 0,001

Примеры

Развернуть
>>> show (MkFixed 12345 :: Fixed E3)
"12.345"
>>> show (MkFixed 12345 :: Milli)
"12.345"

1/1 000 000

data E6 Source

Разрешение 10^-6 = 0,000001

Примеры реализации
Подробности примеров реализации
HasResolution E6 Source

С версии: base-2.1

Подробности реализации

Определено в Data.Fixed

Методы

resolution :: p E6 -> Integer Source

type Micro = Fixed E6 Source

Разрешение 10^-6 = 0,000001

Примеры

Развернуть
>>> show (MkFixed 12345 :: Fixed E6)
"0.012345"
>>> show (MkFixed 12345 :: Micro)
"0.012345"

1/1 000 000 000

data E9 Source

Разрешение 10^-9 = 0,000000001

Примеры реализации
Подробности примеров реализации
HasResolution E9 Source

С версии: base-4.1.0.0

Подробности реализации

Определено в Data.Fixed

Методы

resolution :: p E9 -> Integer Source

type Nano = Fixed E9 Source

Разрешение 10^-9 = 0,000000001

Примеры

Развернуть
>>> show (MkFixed 12345 :: Fixed E9)
"0.000012345"
>>> show (MkFixed 12345 :: Nano)
"0.000012345"

1/1 000 000 000 000

data E12 Source

Разрешение 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) Исходный код

Обобщение divMod на любой тип Real

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API