Рациональный тип данных - 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/8796093022207Clojure
(печать (+ 1/10 2/10)) ⇒ 3/10.
Юля
Юлия> 1//10 + 2//103//10Haskell
В модуле 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. Эддисон-Уэсли.