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/big paketteki 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ğin 12683021339465478347804472r7322545784478161858100577 , üç 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) Rational gerç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. bigrat Pragma şeffaf BigRat desteği açmak için kullanılabilir.
  • Raku : varsayılan Rat tür olarak kullanın (sınırlı kesinliğe sahip rasyonel sayılar). FatRat veri türü keyfi kesinlikte rasyonel sayılar uygular.
  • Python 2.6+: Python'un standart kitaplığı Fraction , modülde bir sınıf içerir fractions .
  • Ruby 2.1 veya daha yenisi: özel sözdizimi kullanan yerel destek.
  • Ruby pre 2.1: standart kitaplık aracılığıyla Rational modülde bir sınıf bulunur rational .
  • Smalltalk , rasgele boyutta tam sayıların bulunduğu ve bu sayıların bulunduğu bir Fraction sınıf kullanarak rasyonel sayıları temsil eder . Aritmetik işlemler uygulanması , , , , fraksiyonlar döner bir indirgenmiş fraksiyon . p/qpq*+-/

Harici kitaplıklarla :

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