Spec-Zone.ru › Haskell 9

Data.Fixed

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

Тип дробных чисел с фиксированной точкой. Параметр типа задаёт количество цифр в дробной части и должен быть экземпляром класса типов 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) Исходный код

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 и 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) Исходный код

С версии: 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 Исходный код

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

Экземпляры
Подробности экземпляров
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 Исходный код

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

Обобщение 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.14.1/docs/libraries/base-4.22.0.0-66f8/Data-Fixed.html

Spec-Zone.ru

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