class (Num a, Ord a) => Real a where
toRational :: a -> Rational
Класс, включающий действительные числа. Поскольку все числа кроме комплексных (тип Complex a
, определённый в модуле Data.Complex
) – действительные, практически все численные типы входят в этот класс. Единственный метод – преобразование числа в рациональное. Поскольку точность любого машинного представления конечная, такое преобразование возможно. В частности, число π, представленное как машинное число с плавающей запятой двойной точности, имеет вид 3.141592653589793 = 884279719003555/281474976710656
.
class (Real a, Enum a) => Integral a where
quot :: a -> a -> a
rem :: a -> a -> a
div :: a -> a -> a
mod :: a -> a -> a
quotRem :: a -> a -> (a, a)
divMod :: a -> a -> (a, a)
toInteger :: a -> Integer
{-# MINIMAL quotRem, toInteger #-}
Целочисленные типы. Класс определяет два варианта целочисленного деления quot
/rem
с округлением в сторону 0 и div
/mod
с округлением в сторону отрицательной бесконечности. Кроме того, определяет преобразование любого целочисленного типа в тип Integer
(имеющего произвольный размер)
class Num a => Fractional a where
(/) :: a -> a -> a
recip :: a -> a
fromRational :: Rational -> a
{-# MINIMAL fromRational, (recip | (/)) #-}
Класс для дробных чисел. Включает в себя числа с плавающей запятой, такие как Float
и Double
, а так же рациональные числа, такие как Rational
. Вводит оператор деления (не целочисленного), функцию обратной дроби recip
и преобразование из Rational
.
class Fractional a => Floating a where
pi :: a
exp :: a -> a
log :: a -> a
sqrt :: a -> a
(**) :: a -> a -> a
logBase :: a -> a -> a
sin :: a -> a
cos :: a -> a
tan :: a -> a
asin :: a -> a
acos :: a -> a
atan :: a -> a
sinh :: a -> a
cosh :: a -> a
tanh :: a -> a
asinh :: a -> a
acosh :: a -> a
atanh :: a -> a
Числа с плавающей запятой. Включает в себя Float
, Double
и т.п. Определяет тригонометрические функции, логарифмы, экспоненту и возведение в степень (**)
. Помимо прочего, определяет константу числа pi
для соотвтетсвующего типа.
class (Real a, Fractional a) => RealFrac a where
properFraction :: Integral b => a -> (b, a)
truncate :: Integral b => a -> b
round :: Integral b => a -> b
ceiling :: Integral b => a -> b
floor :: Integral b => a -> b
Класс действительных дробных чисел. Определяет несколько методов округления (вниз, вверх, усечением и алгебраическим округлением к чётному). Функция properFraction
выделяет из дробного числа целую часть.
class (RealFrac a, Floating a) => RealFloat a where
floatRadix :: a -> Integer
floatDigits :: a -> Int
floatRange :: a -> (Int, Int)
decodeFloat :: a -> (Integer, Int)
encodeFloat :: Integer -> Int -> a
exponent :: a -> Int
significand :: a -> a
scaleFloat :: Int -> a -> a
isNaN :: a -> Bool
isInfinite :: a -> Bool
isDenormalized :: a -> Bool
isNegativeZero :: a -> Bool
isIEEE :: a -> Bool
atan2 :: a -> a -> a
Класс действительных дробных чисел, выраженных в виде чисел с плавающей запятой.
floatRadix
выводит основание системы счисления, используемой для хранения числа с плавающей запятой (почти всегда это 2
)
floatDigits
выводит число разрядов, используемых для хранения мантиссы числа.
floatRange
выводит максимальное и минимальное значения экспоненты числа
decodeFloat
выводит значения мантиссы и экспоненты числа в виде целых чисел. Экспонента числа выводится относительно floatRadix
, т.е. выполняется следующее равенство:
== m * b**e
x where m = fst (decodeFloat x)
= floatRadix x
b = snd (decodeFloat x) e
encodeFloat
– обратная операция.
exponent
– выводит значение экспоненты числа
significand
– выводит значение мантиссы числа (т.е. зануляет экспоненту)
scaleFloat
– увеличивает/уменьшает экспоненту второго аргумента на число, переданное первым аргументом.
Функции is...
проверяют, является ли число NaN
, бесконечностью, отрицательным нулём, находится ли оно в денормализованном представлении (обычно используется для очень маленьких чисел). isIEEE
возвращает Ture
, если на низком уровне число представлено в одном из форматов, определяемых IEEE. True
для типов Float
и Double
.
atan2 y x
определяет расширенный арктангенс, т.е. знаковый угол вектора (x, y) относительно оси X.