GHC.Real
| Авторские права | (c) The University of Glasgow 1994-2002 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Сопровождающие | ghc-devs@haskell.org |
| Стабильность | внутренний |
| Переносимость | непереносимый (расширения GHC) |
| Безопасный Haskell | Safe |
| Язык | Haskell2010 |
Классы
class (Num a, Ord a) => Real a where Source
Вещественные числа.
В отчёте Haskell не определены законы для Real, однако от экземпляров Real обычно ожидается соблюдение следующего закона:
- Согласованность с
fromRational - если тип также реализует
Fractional, тоfromRationalявляется левым обратным дляtoRational, то естьfromRational (toRational i) = i
Этот закон не выполняется для Float, Double, CFloat, CDouble и т. д., поскольку эти типы содержат не конечные значения, которые невозможно преобразовать туда и обратно через Rational.
Методы
toRational :: a -> Rational Source
Рациональное число, эквивалентное вещественному аргументу, с полной точностью.
Экземпляры
class (Real a, Enum a) => Integral a where Исходный код
Целые числа с поддержкой целочисленного деления.
В отчёте Haskell не определены законы для Integral. Однако обычно ожидается, что экземпляры Integral образуют евклидову область и обладают следующими свойствами для пар div/mod и quot/rem при подходящих евклидовых функциях f и g:
-
x=y * quot x y + rem x y, гдеrem x y=fromInteger 0илиg (rem x y)<g y -
x=y * div x y + mod x y, гдеmod x y=fromInteger 0илиf (mod x y)<f y
Примером подходящей евклидовой функции для экземпляра Integer является abs.
Кроме того, toInteger должна быть всюду определена, а fromInteger должна быть для неё левой обратной функцией, то есть fromInteger (toInteger i) = i.
Методы
quot :: a -> a -> a infixl 7 Исходный код
Целочисленное деление с усечением к нулю.
ПРЕДУПРЕЖДЕНИЕ: эта функция не является полной (так как вызывает исключение, если в качестве делителя передано 0) для всех целочисленных типов в base.
rem :: a -> a -> a infixl 7 Исходный код
Остаток от целочисленного деления, удовлетворяющий условию
(x `quot` y)*y + (x `rem` y) == x
ПРЕДУПРЕЖДЕНИЕ: эта функция не является полной (так как вызывает исключение, если в качестве делителя передано 0) для всех целочисленных типов в base.
div :: a -> a -> a infixl 7 Исходный код
Целочисленное деление с округлением вниз до отрицательной бесконечности.
ПРЕДУПРЕЖДЕНИЕ: эта функция не является полной (так как вызывает исключение, если в качестве делителя передано 0) для всех целочисленных типов в base.
mod :: a -> a -> a infixl 7 Исходный код
Остаток от целочисленного деления, удовлетворяющий условию
(x `div` y)*y + (x `mod` y) == x
ПРЕДУПРЕЖДЕНИЕ: эта функция не является полной (так как вызывает исключение, если в качестве делителя передано 0) для всех целочисленных типов в base.
quotRem :: a -> a -> (a, a) Исходный код
ПРЕДУПРЕЖДЕНИЕ: эта функция не является полной (так как вызывает исключение, если в качестве делителя передано 0) для всех целочисленных типов в base.
divMod :: a -> a -> (a, a) Исходный код
ПРЕДУПРЕЖДЕНИЕ: эта функция не является полной (так как вызывает исключение, если в качестве делителя передано 0) для всех целочисленных типов в base.
toInteger :: a -> Integer Исходный код
Преобразование в Integer.
Экземпляры
Определено в GHC.Internal.System.Posix.Types | |
| Integral CNlink Источник | |
Определено в GHC.Internal.System.Posix.Types | |
| Integral COff Источник | |
Определено в GHC.Internal.System.Posix.Types | |
| Integral CPid Источник | |
Определено в GHC.Internal.System.Posix.Types | |
| Integral CRLim Источник | |
Определено в GHC.Internal.System.Posix.Types | |
class Num a => Fractional a where Источник
Дробные числа с поддержкой деления вещественных чисел.
В отчёте Haskell не определены законы для Fractional. Однако обычно предполагается, что (+) и (*) образуют кольцо с делением и обладают следующими свойствами:
recipзадаёт мультипликативную обратную величину-
x * recip x=recip x * x=fromInteger 1 - Полнота
toRational -
toRationalвсюду определена - Согласованность с
toRational - если тип также реализует
Real, тоfromRationalявляется левым обратным дляtoRational, то естьfromRational (toRational i) = i
Обратите внимание: обычно не предполагается, что экземпляр типа Fractional реализует поле. Однако все экземпляры в base это делают.
Минимальное полное определение
fromRational, (recip | (/))
Методы
(/) :: a -> a -> a infixl 7 Источник
Деление дробных чисел.
Обратное дробное число.
fromRational :: Rational -> a Источник
Преобразование из Rational (то есть Ratio Integer). Литерал с плавающей точкой обозначает применение fromRational к значению типа Rational, поэтому такие литералы имеют тип (Fractional a) => a.
Экземпляры
| Fractional CDouble Исходный код | |
Определён в GHC.Internal.Foreign.C.Types | |
| Fractional CFloat Исходный код | |
Определён в GHC.Internal.Foreign.C.Types | |
| Fractional Double Исходный код |
Этот экземпляр реализует стандарт IEEE 754 со всеми его обычными проблемами, связанными с NaN, бесконечностями и отрицательным нулём. >>> 0 == (-0 :: Double) True >>> recip 0 == recip (-0 :: Double) False >>> map (/ 0) [-1, 0, 1] [-Infinity,NaN,Infinity] >>> map (* 0) $ map (/ 0) [-1, 0, 1] [NaN,NaN,NaN] Начиная с: base-2.1 |
Определён в GHC.Internal.Float | |
| Fractional Float Исходный код |
Этот экземпляр реализует стандарт IEEE 754 со всеми его обычными проблемами, связанными с NaN, бесконечностями и отрицательным нулём. >>> 0 == (-0 :: Float) True >>> recip 0 == recip (-0 :: Float) False >>> map (/ 0) [-1, 0, 1 :: Float] [-Infinity,NaN,Infinity] >>> map (* 0) $ map (/ 0) [-1, 0, 1 :: Float] [NaN,NaN,NaN] Начиная с: base-2.1 |
Определён в GHC.Internal.Float | |
| RealFloat a => Fractional (Complex a) Исходный код | Начиная с: base-2.1 |
Определён в Data.Complex Методы(/) :: Complex a -> Complex a -> Complex a Исходный код recip :: Complex a -> Complex a Исходный код fromRational :: Rational -> Complex a Исходный код | |
| Fractional a => Fractional (Identity a) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.Data.Functor.Identity Методы(/) :: Identity a -> Identity a -> Identity a Исходный код recip :: Identity a -> Identity a Исходный код fromRational :: Rational -> Identity a Исходный код | |
| Fractional a => Fractional (Down a) Исходный код | Начиная с: base-4.14.0.0 |
Определён в GHC.Internal.Data.Ord Методы(/) :: Down a -> Down a -> Down a Исходный код recip :: Down a -> Down a Исходный код fromRational :: Rational -> Down a Исходный код | |
| Integral a => Fractional (Ratio a) Исходный код | Начиная с: base-2.0.1 |
Определён в GHC.Internal.Real Методы(/) :: Ratio a -> Ratio a -> Ratio a Исходный код recip :: Ratio a -> Ratio a Исходный код fromRational :: Rational -> Ratio 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 Исходный код | |
| Fractional a => Fractional (Op a b) Исходный код | |
Определён в Data.Functor.Contravariant Методы(/) :: Op a b -> Op a b -> Op a b Исходный код recip :: Op a b -> Op a b Исходный код fromRational :: Rational -> Op a b Исходный код | |
| Fractional a => Fractional (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.Data.Functor.Const Методы(/) :: Const a b -> Const a b -> Const a b Исходный код recip :: Const a b -> Const a b Исходный код fromRational :: Rational -> Const a b Исходный код | |
| Fractional (f (g a)) => Fractional (Compose f g a) Исходный код | Начиная с: base-4.20.0.0 |
Определён в Data.Functor.Compose Методы(/) :: Compose f g a -> Compose f g a -> Compose f g a Исходный код recip :: Compose f g a -> Compose f g a Исходный код fromRational :: Rational -> Compose f g a Исходный код | |
class (Real a, Fractional a) => RealFrac a where Исходный код
Извлечение компонентов дробей.
Минимальное полное определение
Методы
properFraction :: Integral b => a -> (b, a) Исходный код
Функция properFraction принимает вещественное дробное число x и возвращает пару (n,f) такую, что x = n+f, и:
-
n— целое число с тем же знаком, что иx; и -
f— дробное число того же типа и с тем же знаком, что иx, абсолютное значение которого меньше1.
Определения по умолчанию функций ceiling, floor, truncate и round основаны на properFraction.
truncate :: Integral b => a -> b Исходный код
truncate x возвращает ближайшее к x целое число в направлении от нуля к x
round :: Integral b => a -> b Исходный код
round x возвращает ближайшее целое число к x; если x находится на одинаковом расстоянии от двух целых чисел, возвращается чётное целое число
ceiling :: Integral b => a -> b Исходный код
ceiling x возвращает наименьшее целое число, не меньшее x
floor :: Integral b => a -> b Исходный код
floor x возвращает наибольшее целое число, не большее x
Экземпляры
| RealFrac CDouble Источник | |
| RealFrac CFloat Источник | |
| RealFrac Double Источник |
Учтите, что результаты для не конечных аргументов не имеют смысла: >>> [ f x | f <- [round, floor, ceiling], x <- [-1/0, 0/0, 1/0] ] :: [Int] [0,0,0,0,0,0,0,0,0] >>> map properFraction [-1/0, 0/0, 1/0] :: [(Int, Double)] [(0,0.0),(0,0.0),(0,0.0)] и становятся ещё более бессмысленными, если запросить Начиная с: base-2.1 |
| RealFrac Float Источник |
Учтите, что результаты для не конечных аргументов не имеют смысла: >>> [ f x | f <- [round, floor, ceiling], x <- [-1/0, 0/0, 1/0 :: Float] ] :: [Int] [0,0,0,0,0,0,0,0,0] >>> map properFraction [-1/0, 0/0, 1/0] :: [(Int, Float)] [(0,0.0),(0,0.0),(0,0.0)] и становятся ещё более бессмысленными, если запросить Начиная с: base-2.1 |
| RealFrac a => RealFrac (Identity a) Источник | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Identity | |
| RealFrac a => RealFrac (Down a) Источник | Начиная с: base-4.14.0.0 |
| Integral a => RealFrac (Ratio a) Источник | Начиная с: base-2.0.1 |
| HasResolution a => RealFrac (Fixed a) Источник | Начиная с: base-2.1 |
| RealFrac a => RealFrac (Const a b) Источник | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const | |
| RealFrac (f (g a)) => RealFrac (Compose f g a) Источник | Начиная с: base-4.20.0.0 |
Определено в Data.Functor.Compose | |
Преобразование
fromIntegral :: (Integral a, Num b) => a -> b Источник
Общее приведение типов из Integral типов.
ПРЕДУПРЕЖДЕНИЕ: Эта функция выполняет незаметное усечение, если тип результата не является как минимум таким же широким, как тип аргумента.
realToFrac :: (Real a, Fractional b) => a -> b Источник
Общее приведение к Fractional типам.
ПРЕДУПРЕЖДЕНИЕ: Эта функция использует тип Rational, который, например, не содержит значений для NaN. Это означает, что обратное преобразование не возвращает исходное значение.
Для Double функция также ведёт себя по-разному с -O0 и без него:
Prelude> realToFrac nan -- With -O0 -Infinity Prelude> realToFrac nan NaN
Форматирование
Аргументы
| :: Real a | |
| => (a -> ShowS) | функция, которая может отображать значения без знака |
| -> Int | приоритет окружающего контекста |
| -> a | значение для отображения |
| -> ShowS |
Преобразует, возможно отрицательное, значение Real в строку.
Предикаты
even :: Integral a => a -> Bool Источник
odd :: Integral a => a -> Bool Источник
Арифметика
(^) :: (Num a, Integral b) => a -> b -> a infixr 8 Источник
возводит число в неотрицательную целую степень
(^^) :: (Fractional a, Integral b) => a -> b -> a infixr 8 Источник
возводит число в целую степень
gcd x y — это неотрицательный множитель как x, так и y, причём каждый общий множитель x и y также является его множителем; например, gcd 4 2 = 2, gcd (-4) 6 = 2, gcd 0 4 = 4. gcd 0 0 = 0. (То есть общий делитель, который является «наибольшим» в предпорядке делимости.)
Примечание: поскольку для знаковых целочисленных типов фиксированной ширины abs minBound < 0, результат может быть отрицательным, если один из аргументов равен minBound (и обязательно будет таким, если другой равен 0 или minBound) для таких типов.
lcm :: Integral a => a -> a -> a Исходный код
lcm x y — наименьшее положительное целое число, на которое делятся и x, и y.
Рациональные числа
data Ratio a Исходный код
Рациональные числа с числителем и знаменателем некоторого типа Integral.
Обратите внимание, что экземпляры Ratio наследуют недостатки типа-параметра. Например, экземпляр Num для Ratio Natural имеет проблемы, аналогичные проблемам Natural.
Конструкторы
| !a :% !a |
Экземпляры
| Integral a => RealFrac (Ratio a) Исходный код | Начиная с: base-2.0.1 |
Определён в GHC.Internal.Real МетодыproperFraction :: Integral b => Ratio a -> (b, Ratio a) Исходный код truncate :: Integral b => Ratio a -> b Исходный код round :: Integral b => Ratio a -> b Исходный код ceiling :: Integral b => Ratio a -> b Исходный код floor :: Integral b => Ratio a -> b Исходный код | |
| Show a => Show (Ratio a) Исходный код | Начиная с: base-2.0.1 |
Определён в GHC.Internal.Real МетодыshowsPrec :: Int -> Ratio a -> ShowS Исходный код show :: Ratio a -> String Исходный код showList :: [Ratio a] -> ShowS Исходный код | |
type Rational = Ratio Integer Исходный код
Рациональные числа произвольной точности, представленные в виде отношения двух значений Integer. Рациональное число можно создать с помощью оператора %.
infinity :: Rational Исходный код
notANumber :: Rational Исходный код
Вспомогательные функции для перечислений
numericEnumFrom :: Fractional a => a -> [a] Исходный код
numericEnumFromThen :: Fractional a => a -> a -> [a] Исходный код
numericEnumFromTo :: (Ord a, Fractional a) => a -> a -> [a] Исходный код
numericEnumFromThenTo :: (Ord a, Fractional a) => a -> a -> a -> [a] Исходный код
integralEnumFrom :: (Integral a, Bounded a) => a -> [a] Исходный код
integralEnumFromThen :: (Integral a, Bounded a) => a -> a -> [a] Исходный код
integralEnumFromTo :: Integral a => a -> a -> [a] Исходный код
integralEnumFromThenTo :: Integral a => a -> a -> a -> [a] Исходный код
Создание
(%) :: Integral a => a -> a -> Ratio a infixl 7 Исходный код
Формирует отношение двух целых чисел.
Проекция
numerator :: Ratio a -> a Исходный код
Извлекает числитель отношения в сокращённой форме: числитель и знаменатель не имеют общих множителей, а знаменатель положителен.
denominator :: Ratio a -> a Исходный код
Извлекает знаменатель отношения в сокращённой форме: числитель и знаменатель не имеют общих множителей, а знаменатель положителен.
Операции
reduce :: Integral a => a -> a -> Ratio a Исходный код
reduce — вспомогательная функция, используемая только в этом модуле. Она нормализует отношение, деля числитель и знаменатель на их наибольший общий делитель.
Внутренние средства
ratioPrec1 :: Int Исходный код
divZeroError :: a Исходный код
ratioZeroDenominatorError :: a Исходный код
overflowError :: a Исходный код
underflowError :: a Исходный код
mkRationalBase2 :: Rational -> Integer -> Rational Исходный код
mkRationalBase10 :: Rational -> Integer -> Rational Исходный код
data FractionalExponentBase Исходный код
Экземпляры
| Show FractionalExponentBase Исходный код | |
Определён в GHC.Internal.Real МетодыshowsPrec :: Int -> FractionalExponentBase -> ShowS Исходный код | |
(^%^) :: Integral a => Rational -> a -> Rational Исходный код
(^^%^^) :: Integral a => Rational -> a -> Rational Исходный код
mkRationalWithExponentBase :: Rational -> Integer -> FractionalExponentBase -> Rational Исходный код
powImpl :: (Num a, Integral b) => a -> b -> a Исходный код
powImplAcc :: (Num a, Integral b) => a -> b -> a -> 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/GHC-Real.html