Racionální datový typ - Rational data type - Wikipedia

Nějaký programovací jazyky poskytnout vestavěný (primitivní) Racionální datový typ reprezentovat racionální čísla jako 1/3 a -11/17 bez zaokrouhlování a dělat na nich aritmetiku. Příklady jsou poměr Typ Společný Lisp a analogické typy poskytované většinou jazyků pro algebraický výpočet, jako Mathematica a Javor. Mnoho jazyků, které nemají vestavěný racionální typ, jej stále poskytuje jako knihovna -definovaný typ.

Zastoupení

Proměnná nebo hodnota tohoto typu je obvykle reprezentována jako zlomek m/n kde m a n jsou dva celé číslo čísla, buď s pevným, nebo libovolná přesnost. V závislosti na jazyce, jmenovatel n může být omezeno na nenulovou hodnotu a tato dvě čísla mohou být uchovávána ve zmenšené formě (bez běžných dělitele kromě 1).

Jazyky, které podporují racionální datový typ, obvykle poskytují speciální syntaxi pro vytváření takových hodnot a také rozšiřují základní aritmetické operace ('+', '-', '×', '/', celé číslo pravomoci ) a srovnání ('=', '<', '>', '≤'), která na ně působí - buď nativně, nebo prostřednictvím přetížení operátora zařízení poskytované jazykem. Tyto operace mohou být přeloženy překladač do sekvence celého čísla pokyny ke stroji, nebo do knihovna hovory. Podpora se může rozšířit i na další operace, jako je formátování, zaokrouhlování na celé číslo nebo plovoucí bod hodnota atd. Stejně jako v matematice tyto jazyky často interpretují celočíselnou hodnotu jako ekvivalent racionální hodnoty se jmenovatelem jednotky.

Jazyková podpora

Integrovaná nebo základní knihovna:

  • C ++ zahrnoval podporu pro racionální aritmetiku v době kompilace v podobě obsahu jeho standardní knihovna je <ratio> záhlaví od té doby jeho revize z roku 2011.
  • Clojure umí provádět aritmetiku na racionálních číslech a nabízí doslovný tvar, který je reprezentuje.
  • Jít poskytuje racionální čísla ve standardní knihovně v matematika / velká balík.
  • J poskytuje racionální čísla v základním jazyce. Například, 1r3 je jedna třetina. Rationals v J. použití libovolná přesnost celá čísla pro čitatele i jmenovatele, což umožňuje libovolnou přesnost jiných než celých čísel. Například, 12683021339465478347804472r7322545784478161858100577 představuje druhou odmocninu tří až 50 desetinných míst.[1]
  • Julie poskytuje racionální čísla s racionálním operátorem, //. Například, 6//9 == 2//3 && Typ(-4//9) == Racionální{Int64}.[2]
  • Haskell poskytuje a Racionální typ, což je skutečně alias pro Poměrné celé číslo (Poměr být polymorfním typem implementujícím racionální čísla pro všechny Integrální typ čitatelů a jmenovatelů). Frakce je konstruována pomocí operátoru%.[3]
  • OCaml Knihovna Num implementuje racionální čísla s libovolnou přesností.
  • Perl: Matematika :: BigRat základní modul implementuje racionální čísla s libovolnou přesností. The bigrat pragma lze použít k zapnutí transparentní podpory BigRat.
  • Raku: použít ve výchozím nastavení Krysa[4] typ (racionální čísla s omezenou přesností). FatRat[5] datový typ implementuje racionální čísla s libovolnou přesností.
  • Python 2.6+: Krajta Standardní knihovna obsahuje a Zlomek třídy v modulu zlomky.[6]
  • Rubín 2.1 nebo novější: nativní podpora pomocí speciální syntaxe.
  • Ruby pre 2.1: prostřednictvím standardní knihovny obsahuje a Racionální třídy v modulu Racionální.
  • Pokec představuje racionální čísla pomocí a Zlomek třída ve formě p / q kde str a q jsou celá čísla libovolné velikosti. Použití aritmetických operací *, +, -, /, to frakce vrátí snížený zlomek.

S externími knihovnami:

Společný Lisp

Společný Lisp poskytuje číselný datový typ pro libovolně velká racionální čísla: POMĚR.[7]

 1/3  1/3

Typ racionálního čísla je POMĚR:

 (Typ 1/3)  POMĚR

Dělení dvou celých čísel může vrátit racionální číslo a násobení racionálního čísla může vrátit celé číslo:

 (/ 6 8)  3/4 (* 3/4 16)  12

The čitatel a jmenovatel lze získat pomocí stejnojmenných funkcí, které redukují racionální na kanonickou formu a počítají čitatele nebo jmenovatele této formy:[8]

 (čitatel 12/16)  3 (jmenovatel 12/16)  4

Výpočet s velkými celými čísly, který vrací velké racionální číslo:

 (/ (1- (expt 2 200)) (1- (expt 2 43)))  1606938044258990275541962092341162602522202993782792835301375/8796093022207

Clojure

(tisk (+ 1/10 2/10)) ⇒ 3/10

Julie

julia> 1//10 + 2//103//10

Haskell

V modulu Data.Ratio

(1 % 10) + (2 % 10) ⇒ 3 % 10

Raketa (schéma PLT)

> (+ 1/10 2/10)3/10

Raku

Raku poskytuje Krysa zadejte ve výchozím nastavení.

můj $ v = 0.2;říci „{$ v} je {$ v. ^ name} a má čitatel {$ v.numerator} a jmenovatel {$ v.denominator}";# ⇒ 0,2 je Krysa a má čitatel 1 a jmenovatel 5
říci 0.1 + 0.2# ⇒ 0.3
říci (0.1 + 0.2 - 0.3).fmt("% .17f")# ⇒ 0.00000000000000000
říci 1 / (0.1 + 0.2 - 0.3)# ⇒ Pokus o vydělení nulou při nucení Rational na Str

Rubín

Použití speciální syntaxe ve verzi 2.1 nebo novější:

irb (hlavní): 001: 0>uvádí 1/10r + 2/10r3/10=> nula

Reference