Рациональный тип данных - Rational data type
Немного языки программирования предоставить встроенный (примитивный) рациональный тип данных представлять рациональное число например, 1/3 и -11/17 без округления, и делать с ними арифметические операции. Примерами являются соотношение
тип Common Lisp, и аналогичные типы, предоставляемые большинством языков для алгебраические вычисления, Такие как Mathematica и Клен. Многие языки, в которых нет встроенного рационального типа, по-прежнему предоставляют его как библиотека -определенный тип.
Представление
Переменная или значение этого типа обычно представляется как дробная часть м/п куда м и п два целое число числа, либо с фиксированным, либо произвольная точность. В зависимости от языка знаменатель п может быть ограничен, чтобы быть ненулевым, и два числа могут быть сохранены в сокращенной форме (без каких-либо общих делители кроме 1).
Языки, поддерживающие рациональный тип данных, обычно предоставляют специальный синтаксис для построения таких значений, а также расширяют базовые арифметические операции ('+', '-', '×', '/', целое число полномочия ) и сравнения ('=', '<', '>', '≤'), чтобы воздействовать на них - либо изначально, либо через перегрузка оператора возможности, предоставляемые языком. Эти операции могут быть переведены компилятор в последовательность целых чисел машинные инструкции, или в библиотека звонки. Поддержка также может распространяться на другие операции, такие как форматирование, округление до целого числа или плавающая точка значение и т. д. Как и в математике, эти языки часто интерпретируют целочисленное значение как эквивалент рационального значения с единичным знаменателем.
Языковая поддержка
Встроенная или базовая библиотека:
- C ++ включает поддержку рациональной арифметики времени компиляции в виде содержимого его стандартная библиотека с
<ratio>
заголовок поскольку его редакция 2011 г.. - Clojure может выполнять арифметические действия с рациональными числами и предлагает буквальную форму для их представления.
- Идти предоставляет рациональные числа в стандартной библиотеке, в
математика / большой
упаковка. - J предоставляет рациональные числа на основном языке. Например,
1r3
составляет одну треть. Рациональное использование J произвольная точность целые числа для числителя и знаменателя, что позволяет использовать нецелые числа произвольной точности. Например,12683021339465478347804472r7322545784478161858100577
представляет собой квадратный корень из трех до 50 десятичных цифр.[1] - Юля предоставляет рациональные числа с помощью рационального оператора,
//
. Например,6//9 == 2//3 && тип(-4//9) == Рациональный{Int64}
.[2] - Haskell обеспечивает
Рациональный
type, который на самом деле является псевдонимом дляОтношение Целое число
(Соотношение
являясь полиморфным типом, реализующим рациональные числа для любыхинтеграл
тип числителей и знаменателей). Дробь строится с помощью оператора%.[3] - OCaml Библиотека Num реализует рациональные числа произвольной точности.
- Perl:
Math :: BigRat
Основной модуль реализует рациональные числа произвольной точности. Вбольшая крыса
pragma можно использовать для включения прозрачной поддержки BigRat. - Раку: использовать по умолчанию
Крыса
[4] тип (рациональные числа с ограниченной точностью).FatRat
[5] Тип данных реализует рациональные числа произвольной точности. - Python 2.6+: Python стандартная библиотека включает
Дробная часть
класс в модулефракции
.[6] - Рубин 2.1 или новее: встроенная поддержка с использованием специального синтаксиса.
- Ruby pre 2.1: через стандартную библиотеку включает
Рациональный
класс в модулерациональный
. - Болтовня представляет рациональные числа с помощью
Дробная часть
класс в формеп / д
кудап
иq
- целые числа произвольного размера. Применение арифметических операций*
,+
,-
,/
, в дроби возвращает уменьшенную дробь.
С внешними библиотеками:
- За C & C ++ есть проекты вроде Библиотека арифметики множественной точности GNU.
- В Apache Commons Математическая библиотека предоставляет рациональные числа для Ява с этими
Дробная часть
учебный класс.
Common Lisp
Common Lisp предоставляет числовой тип данных для рациональных чисел произвольного размера: СООТНОШЕНИЕ.[7]
1/3 ⇒ 1/3
Тип рационального числа СООТНОШЕНИЕ
:
(тип 1/3) ⇒ СООТНОШЕНИЕ
Разделение двух целых чисел может вернуть рациональное число, а умножение рационального числа может вернуть целое число:
(/ 6 8) ⇒ 3/4 (* 3/4 16) ⇒ 12
В числитель и знаменатель могут быть получены с использованием одноименных функций, которые приводят рациональную форму к канонической и вычисляют числитель или знаменатель этой формы соответственно:[8]
(числитель 12/16) ⇒ 3 (знаменатель 12/16) ⇒ 4
Вычисления с большими целыми числами, возвращающие большое рациональное число:
(/ (1- (expt 2 200)) (1- (expt 2 43))) ⇒ 1606938044258990275541962092341162602522202993782792835301375/8796093022207
Clojure
(печать (+ 1/10 2/10)) ⇒ 3/10.
Юля
Юлия> 1//10 + 2//103//10
Haskell
В модуле Data.Ratio
(1 % 10) + (2 % 10) ⇒ 3 % 10
Ракетка (схема PLT)
> (+ 1/10 2/10)3/10
Раку
Раку обеспечивает Крыса
тип по умолчанию.
мой $ v = 0.2;сказать "{$ v} равно {$ v. ^ name} и имеет числитель {$ v.numerator} и знаменатель {$ v.denominator}";# ⇒ 0,2 - это Крыса с числителем 1 и знаменателем 5
сказать 0.1 + 0.2# ⇒ 0.3
сказать (0.1 + 0.2 - 0.3).fmt("% .17f")# ⇒ 0.00000000000000000
сказать 1 / (0.1 + 0.2 - 0.3)# ⇒ Попытка разделить на ноль при приведении Rational к Str
Рубин
Использование специального синтаксиса в версии 2.1 или новее:
irb (основной): 001: 0>ставит 1/10р + 2/10р3/10=> ноль
Рекомендации
- ^ http://www.jsoftware.com/jwiki/Vocabulary/NumericPrecisions
- ^ http://docs.julialang.org/en/latest/manual/complex-and-rational-numbers/#rational-numbers
- ^ https://www.haskell.org/onlinereport/ratio.html
- ^ https://docs.raku.org/type/Rat
- ^ https://docs.raku.org/type/FatRat
- ^ https://docs.python.org/3/library/fractions.html
- ^ Common Lisp HyperSpec: RATIO
- ^ Функция NUMERATOR, DENOMINATOR на Common Lisp HyperSpec
- Дональд Кнут, Искусство программирования, т. 2. Эддисон-Уэсли.