Rasyonel veri türü - Rational data type
Bazı programlama dilleri , 1/3 ve -11/17 gibi rasyonel sayıları yuvarlamadan temsil etmek ve bunlar üzerinde aritmetik yapmak için yerleşik (ilkel) bir rasyonel veri türü sağlar . Örnekler, Common Lisp türü ve Mathematica ve Maple gibi cebirsel hesaplama için çoğu dil tarafından sağlanan benzer türlerdir . Yerleşik bir rasyonel türe sahip olmayan birçok dil, onu hala kitaplık tanımlı bir tür olarak sağlar.
ratio
Temsil
Bu türün bir değişkeni veya değeri genellikle m / n kesri olarak temsil edilir, burada m ve n sabit veya keyfi bir hassasiyetle iki tam sayıdır . Dile bağlı olarak, payda n sıfır olmayacak şekilde sınırlandırılabilir ve iki sayı indirgenmiş biçimde tutulabilir ( 1 dışında herhangi bir ortak bölen olmadan ).
Rasyonel bir veri türünü destekleyen diller genellikle bu tür değerleri oluşturmak için özel sözdizimi sağlar ve ayrıca temel aritmetik işlemleri ('+', '-', '×', '/', tamsayı güçleri ) ve karşılaştırmaları ('=', '<', '>', '≤') - yerel olarak veya dil tarafından sağlanan operatör aşırı yükleme olanakları aracılığıyla bunlara göre hareket etmek . Bu işlemler, derleyici tarafından bir dizi tamsayı makine talimatına veya kütüphane çağrılarına dönüştürülebilir . Destek ayrıca, biçimlendirme, bir tam sayıya yuvarlama veya kayan nokta değerine yuvarlama , vb. Gibi diğer işlemleri de kapsayabilir . Matematikte olduğu gibi, bu diller genellikle bir tamsayı değerini birim paydalı bir rasyonel değere eşdeğer olarak yorumlar.
Dil desteği
Yerleşik veya temel kitaplık :
-
C ++ içeriğini şeklinde derleme zamanı rasyonel aritmetik için destek dahil etmiştir standart kütüphanesinde 'ın
<ratio>başlık beri onun 2011 revizyonu . - Clojure , rasyonel sayılar üzerinde aritmetik gerçekleştirebilir ve bunları temsil etmek için birebir form sunar.
-
Go ,
math/bigpaketteki standart kitaplıkta rasyonel sayılar sağlar . -
J , temel dilde rasyonel sayılar sağlar. Örneğin,
1r3üçte birdir. J'deki rasyonel ifadeler, hem pay hem de payda için keyfi kesinlikli tamsayılar kullanır ve tamsayı olmayan keyfi kesinliğe izin verir. Örneğin12683021339465478347804472r7322545784478161858100577, üç ila 50 ondalık basamağın karekökünü temsil eder. -
Julia , rasyonel operatörle rasyonel sayılar sağlar
//. Örneğin ,.6//9 == 2//3 && typeof(-4//9) == Rational{Int64} -
Haskell , ( her tür pay ve payda için rasyonel sayılar uygulayan polimorfik bir tür olmak üzere)
Rationalgerçekten bir takma ad olan bir tür sağlar . Kesir,% operatörü kullanılarak oluşturulur.Ratio IntegerRatioIntegral - OCaml'ın Num kütüphanesi, keyfi kesinlikte rasyonel sayılar uygular.
-
Perl :
Math::BigRatçekirdek modül, keyfi kesinlikte rasyonel sayılar uygular.bigratPragma şeffaf BigRat desteği açmak için kullanılabilir. -
Raku : varsayılan
Rattür olarak kullanın (sınırlı kesinliğe sahip rasyonel sayılar).FatRatveri türü keyfi kesinlikte rasyonel sayılar uygular. - Python 2.6+: Python'un standart kitaplığı
Fraction, modülde bir sınıf içerirfractions. - Ruby 2.1 veya daha yenisi: özel sözdizimi kullanan yerel destek.
- Ruby pre 2.1: standart kitaplık aracılığıyla
Rationalmodülde bir sınıf bulunurrational. -
Smalltalk , rasgele boyutta tam sayıların bulunduğu ve bu sayıların bulunduğu bir
Fractionsınıf kullanarak rasyonel sayıları temsil eder . Aritmetik işlemler uygulanması , , , , fraksiyonlar döner bir indirgenmiş fraksiyon .p/qpq*+-/
Harici kitaplıklarla :
- İçin C & C ++ gibi projeler var GNU Çoklu Hassas Aritmetik Kütüphanesi .
- Apache Commons Math kütüphanesi için rasyonel sayılar sağlar Java onun ile
Fractionsınıfında.
Ortak Lisp
Common Lisp , rasgele boyutlandırılmış rasyonel sayılar için sayısal bir veri türü sağlar: RATIO .
1/3
⇒ 1/3
Rasyonel sayının türü RATIO :
(type-of 1/3)
⇒ RATIO
İki tam sayının bölünmesi bir rasyonel sayı döndürebilir ve bir rasyonel sayının çarpımı bir tam sayı döndürebilir:
(/ 6 8)
⇒ 3/4
(* 3/4 16)
⇒ 12
Pay ve payda kanonik forma rasyonel azaltmak ve sırasıyla, o formun pay veya payda hesaplamak Eşsesli fonksiyonları kullanarak elde edilebilir:
(numerator 12/16)
⇒ 3
(denominator 12/16)
⇒ 4
Büyük bir rasyonel sayı döndüren büyük tam sayılarla hesaplama:
(/ (1- (expt 2 200)) (1- (expt 2 43)))
⇒ 1606938044258990275541962092341162602522202993782792835301375/8796093022207
Clojure
(print (+ 1/10 2/10)) ⇒ 3/10
Julia
julia> 1//10 + 2//10
3//10
Haskell
Data.Ratio modülünde
(1 % 10) + (2 % 10) ⇒ 3 % 10
Raket (PLT Şeması)
> (+ 1/10 2/10)
3/10
Raku
Raku , Rat varsayılan olarak tür sağlar .
my $v = 0.2;
say "{$v} is {$v.^name} and has numerator {$v.numerator} and denominator {$v.denominator}";
# ⇒ 0.2 is Rat and has numerator 1 and denominator 5
say 0.1 + 0.2
# ⇒ 0.3
say (0.1 + 0.2 - 0.3).fmt("%.17f")
# ⇒ 0.00000000000000000
say 1 / (0.1 + 0.2 - 0.3)
# ⇒ Attempt to divide by zero when coercing Rational to Str
Yakut
2.1 veya daha yenisinde özel sözdizimi kullanma:
irb(main):001:0> puts 1/10r + 2/10r
3/10
=> nil
Referanslar
- ^ 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
- ^ Ortak Lisp HyperSpec: RATIO
- ^ Fonksiyon pay, payda olarak Common Lisp HyperSpec
- Donald Knuth , Bilgisayar Programlama Sanatı , cilt. 2. Addison-Wesley.