Kesirli sayıları kaydetmenin sayısız yolu vardır ve her birinin avantaj ve dezavantajları vardır.
Kayan nokta , bugüne kadar en popüler biçimdir. Tamsayılara bir işaret, bir mantis ve imzalı bir üs-2 üssünü kodlayarak ve bunları bir demet bit olarak paketleyerek çalışır. Mesela, sen bir 32 bit mantis olabilir 0.5
(olarak kodlanmış 0x88888888
) ve bir 32 bitlik imzalı üs +3
( 0x00000003
için deşifre olurdu), 4.0
(0.5 * 2 ^ 3
). Kayan nokta sayıları hızlıdır, çünkü donanımda uygulanırlar ve kesin boyutları mutlak boyutta ölçeklenir, yani sayı ne kadar küçükse, mutlak hassasiyetiniz o kadar iyi olur, bu nedenle göreceli yuvarlama hatası mutlak boyutta sabit kalır. Şamandıralar, uzunluklar, ses basıncı seviyeleri, ışık seviyeleri vb. Gibi sürekli bir alandan örneklenen değerler için mükemmeldir ve bu nedenle, genel olarak ses ve görüntü işlemede, ayrıca istatistiksel analiz ve fizik simülasyonlarında kullanılırlar. En büyük dezavantajı, kesin olmadıkları, yani yuvarlama hatalarına yatkın oldukları ve tüm ondalık kesirleri doğru şekilde temsil edemedikleridir. Bütün ana programlama dilleri bir tür kayan noktaya sahiptir.
Sabit noktayeterince büyük tamsayılar kullanarak ve parçalarının bir kısmını kesirli kısım için dolaylı olarak ayırma yoluyla çalışır. Örneğin, 24.8 bitlik sabit nokta sayısı, tamsayı kısmı (işareti dahil) için 24 bit ve kısmi bölüm için 8 bit ayırır. Bu sayının 8 bit kadar sağa kaydırılması, bize tam sayı kısmını verir. Sabit nokta sayıları, donanım kayan nokta üniteleri nadir olduğunda ya da en azından tam sayılarına göre daha yavaştığında popülerdi. Sabit nokta sayıları doğruluk bakımından biraz daha kolay olsa da (sadece nedenini düşünmeleri daha kolay olduğu için), hemen hemen her alanda yüzmeye aşağı kalırlar - daha az hassasiyete, daha küçük bir aralığa sahiptirler ve çünkü Örtük kayma hesaplamalarını düzeltmek için işlem yapılması gerekir, bugün sabit nokta matematik genellikle kayan nokta matematikten daha yavaştır.
Ondalık türler kayan nokta veya sabit nokta sayıları gibi çalışır, ancak onlu bir sistem olduğunu varsayarlar; üstelik üsleri (örtük veya açık) 10'un gücünü (2'nin gücünü değil) kodlar. Ondalık bir sayı, örneğin, bir mantisini 23456
ve bir üssünü kodlayabilir -2
ve bu,234.56
. Ondalık, çünkü aritmetik işlemciye CPU'ya bağlı değil, kayan noktalardan daha yavaş, ancak ondalık sayılar içeren ve bu sayının kesin olmasını gerektiren her şey için ideal, iyi tanımlanmış noktalarda yuvarlama - finansal hesaplamalar, çetele tahtaları, vb. Bazı programlama dilleri kendi içinde yerleşik olan ondalık tiplere sahiptir (örneğin, C #), bazıları ise bunları uygulamak için kütüphanelere ihtiyaç duyar. Ondalıklar, yinelenmeyen ondalık kesirleri doğru şekilde temsil edebiliyor olsa da, hassasiyetlerinin kayan nokta sayısından daha iyi olmadığını unutmayın; Ondalıkları seçmek, yalnızca bir ondalık sistemde tam olarak temsil edilebilecek sayıların tam temsilini elde edeceğiniz anlamına gelir (kayan noktaların tıpkı ikili kesirleri tam olarak temsil edebildiği gibi).
Rasyonel sayılar, tipik olarak bir tür bignum tamsayı türü (bilgisayarın bellek kısıtlamalarının izin verdiği kadar büyüyebilen sayısal bir tür) kullanarak bir payda veya bir payda saklar. Bu yalnızca veri doğru model numaraları gibi olabilir demet dışarı türüdür 1/3
ya 3/17
rationals, diğer veri türlerinin aksine, gibi şeyler için doğru sonuçlar üretecek - yanı üzerlerinde operasyonlarının olarak3 * 1/3
. Matematik oldukça basittir, ancak etkili bir faktoring algoritması ile gelmesi oldukça zordur. Bazı programlama dilleri, içine yerleştirilmiş rasyonel tiplere sahiptir (örn. Common Lisp). Gerekçelerin dezavantajları, yavaş olmalarını (çoğu işlemin kesirleri azaltmayı ve bileşenlerini çarpanlara ayırmayı gerektirmesi) ve birçok ortak işlemin gerçekleştirilmesinin zor ya da imkansız olduğunu ve çoğu uygulamanın bu gerçekleştiğinde (örneğin, sin()
rasyonel üzerinde).
BCD (İkili Kodlu Ondalık), her bir basamağı kodlamak için "nibbles" (4 bitlik gruplar) kullanır; Bir dişi 16 farklı değer tutabildiğinden, ancak ondalık sayılar sadece 10 gerektirdiğinden, diş başına 6 "kaçak" değer vardır. Ondalık gibi, BCD sayıları da kesindir, yani ondalık sayılar üzerinde yapılan hesaplamalar tıpkı kalem ve kâğıt kullanarak yaparsanız olduğu gibi çalışır. BCD için aritmetik kurallar biraz beceriksizdir, ancak bunun tersi, bunları dizelere dönüştürmenin, bazı gömülü sistemler gibi özellikle düşük kaynaklı ortamlar için ilginç olan diğer biçimlerden daha kolay olmasıdır.
Dizeler , evet, düz eski dizeler de kesirli sayıları temsil etmek için kullanılabilir. Teknik olarak, bu BCD'ye çok benzer, sadece açık bir ondalık nokta var ve ondalık basamak başına bir tam bayt kullanıyorsunuz. Bu nedenle, format israflıdır (256 olası değerden yalnızca 11'i kullanılır), ancak BCD'den ayrıştırılması ve oluşturulması daha kolaydır. Ek olarak, kullanılan tüm değerler "şüphesiz" olduğundan, zararsız ve platform açısından nötr, dize kodlu sayılar ağlar üzerinden sorunsuz şekilde dolaşabilir. Doğrudan dizgelerde aritmetik işlemlerin yapılması nadirdir, ancak mümkündür ve bunu yaptığınızda diğer ondalık biçimlerde (ondalık ve BCD) olduğu gibi tam olarak ondalık olurlar.