Главная » Haskell » Модуль Fixed

0

определяет тип данных для выполнения арифметических действий над значениями фиксированной точности. В модуле описывается класс, тип данных и несколько синонимов  типов для выполнения таких операций. Кроме того, имеется несколько обобщённых функций для выполнения арифметических действий. Использование:

import  Data.Fixed

Тип: Fixed

Описание: тип для представления значений, над которыми можно производить арифметические операции с фиксированной точностью.

Определение:

newtype Fixed  a =  MkFixed Integer deriving (Eq,  Ord)

Для  этого  типа  определены экземпляры следующих классов:   Enum,   Eq,

Fractional, Num, Ord, Real, RealFrac и Show.

Класс: HasResolution

Описание: интерфейс для тех типов, которые могут использоваться в операциях с фиксированной точностью. Единственный метод resolution используется для преобразования к типу Fixed, который является изоморфным типу Integer. Определение:

class  HasResolution  a  where resolution ::  a  ->  Integer

Тип: E6

Описание: тип для проведения арифметических  операций с точностью 106.

Определение:

data  E6  =  E6

Тип: E12

Описание: тип для проведения арифметических  операций с точностью 1012.

Определение:

data  E12  =  E12

Типы E6 и E12 имеют определённые экземпляры  класса HasResolution  и используются для проведения вычислений с точностью до 6 и до 12 знаков. Функция: div’

Описание:  обобщение функции div  (см. стр. 130) для произвольного экземпляра класса Real.

Определение:

div’ :: (Real  a, Integral b)  => a ->  a ->  b

div’ n d = floor ((toRational n)  / (toRational d))

Функция: mod’

Описание:  обобщение функции mod (см. стр. 147) для произвольного экземпляра класса Real.

Определение:

mod’ :: (Real  a)  => a ->  a  ->  a mod’ n d = n  (fromInteger f) * d

where

f =  div’  n d

Функция: divMod’

Описание: обобщение функции divMod (см. стр. 119) для произвольного экземпляра класса Real.

Определение:

divMod’  :: (Real  a, Integral b)  => a ->  a  ->  (b, a) divMod’  n d = (f, n  (fromIntegral f) * d)

where

f =  div’  n d

Остаётся отметить, что  за  этот  модуль в  поставке  языка  Haskell  отвечает Э.  Якели,  с  которым  можно  связаться по  адресу  электронной почты ashley@semantic.org.

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии