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 proPoměrné celé číslo
(Poměr
být polymorfním typem implementujícím racionální čísla pro všechnyIntegrá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í. Thebigrat
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 moduluzlomky
.[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 moduluRacionální
. - Pokec představuje racionální čísla pomocí a
Zlomek
třída ve forměp / q
kdestr
aq
jsou celá čísla libovolné velikosti. Použití aritmetických operací*
,+
,-
,/
, to frakce vrátí snížený zlomek.
S externími knihovnami:
- Pro C & C ++ existují projekty jako GNU Multiple Precision Arithmetic Library.
- The Apache Commons Matematická knihovna poskytuje racionální čísla pro Jáva s jeho
Zlomek
třída.
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
- ^ 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
- ^ Společný Lisp HyperSpec: POMĚR
- ^ Funkce NUMERÁTOR, DENOMINÁTOR na Společný Lisp HyperSpec
- Donald Knuth, Umění počítačového programování, sv. 2. Addison-Wesley.