Ondalık veri türü - Decimal data type

Bazı programlama dilleri (veya onlar için derleyiciler), 0.3 ve -1.17 gibi tekrarlanmayan ondalık kesirleri yuvarlamadan temsil etmek ve bunlar üzerinde aritmetik yapmak için yerleşik (ilkel) veya kitaplık ondalık veri türü sağlar . Örnekler, Python türü ve diğer diller tarafından sağlanan benzer türlerdir. decimal.Decimal

Gerekçe

Kesirli sayılar, çoğu programlama dilinde kayan noktalı sayılar veya sabit noktalı sayılar olarak desteklenir . Bununla birlikte, bu tür temsiller tipik olarak paydayı ikinin kuvvetiyle sınırlar. Çoğu ondalık kesir (veya genel olarak çoğu kesir), paydası ikinin kuvveti olan bir kesir olarak tam olarak temsil edilemez. Örneğin, basit ondalık kesir 0.3 (3/10), 5404319552844595/18014398509481984 (0.299999999999999988897769...) olarak gösterilebilir. Bu yanlışlık, deneyimli programcıların aşina olduğu birçok soruna neden olur. Örneğin, ifade 0.1 * 7 == 0.7, bazı sistemlerde, ondalık sayıların gösteriminin kesin olmaması nedeniyle, mantık dışı olarak false olarak değerlendirilebilir.

Tüm ondalık kesirler kesirler olduğundan ve bu nedenle onu tam olarak temsil etmek için rasyonel bir veri türü kullanmak mümkün olsa da, birçok durumda yalnızca tekrarlanmayan ondalık kesirleri (paydası on'un bir kuvveti olan kesirler) düşünmek daha uygun olabilir. Örneğin, dünya çapındaki kesirli para birimleri çoğunlukla, on'un gücü olan bir paydaya dayanmaktadır. Ayrıca, bilimdeki çoğu kesirli ölçüm, diğer payda sistemlerine sahip kesirlerin aksine, ondalık kesirler olarak rapor edilir.

Ondalık veri türü, kayan noktalı sayı veya sabit noktalı sayı olarak uygulanabilir . Sabit nokta durumunda, payda onluk sabit bir güce ayarlanacaktır. Kayan nokta durumunda, değişken bir üs, sayının mantisinin çarpıldığı on'un gücünü temsil eder.

Rasyonel bir veri türünü destekleyen diller, ikincisinin neden olacağı kesinlik kaybına bağlı olarak, 2 tabanlı bir kayan noktalı sayı yerine genellikle iki tam sayıdan böyle bir değerin oluşturulmasına izin verir. Genellikle temel aritmetik işlemler ('+', '−', '×', '/', tamsayılı kuvvetler ) ve karşılaştırmalar ('=', '<', '>', '≤') uygulanacak şekilde genişletilir. bunları - yerel olarak veya dil tarafından sağlanan operatör aşırı yükleme tesisleri aracılığıyla . Bu işlemler derleyici tarafından bir dizi tamsayı makine talimatına veya kitaplık çağrılarına çevrilebilir . Destek, biçimlendirme, tam sayıya veya kayan nokta değerine yuvarlama vb. gibi diğer işlemleri de kapsayabilir . Buna bir örnek 123.456'dır.

Standart biçimler

IEEE 754 , farklı hassasiyette üç standart kayan noktalı ondalık veri türünü belirtir:

Dil desteği

  • C#, 28-29 anlamlı basamakla sonuçlanan 128 bitten oluşan yerleşik bir 'ondalık' veri türüne sahiptir. Yaklaşık (-7,9 x 10^28 - 7,9 x 10^28) / (10^(0 - 28) aralığına sahiptir.
  • Python 2.4 ile başlayarak, Python'un standart kitaplığı, decimal modülünde bir Decimal sınıfı içerir .
  • Ruby'nin standart kitaplığı, bigdecimal modülünde bir BigDecimal sınıfı içerir
  • Java'nın standart kitaplığı bir java.math.BigDecimal sınıfı içerir
  • Gelen amaç-C , kakao ve GNUStep API'leri bir sağlamaktır NSDecimalNumber bir sınıf ve NSDecimal olan mantis uzunluğu 38 basamağa kadar olan ondalık sayılar temsil C veri türü, ve üstel -128 ile 127 etmektir.
  • Bazı IBM sistemleri ve SQL sistemleri, en az iki büyük formatla DECFLOAT formatını destekler
  • ABAP'nin yeni DECFLOAT veri türü, decimal64 (DECFLOAT16 olarak) ve decimal128 (DECFLOAT34 olarak) biçimlerini içerir
  • PL/I hem sabit noktalı hem de kayan noktalı ondalık verileri yerel olarak destekler.
  • GNU Derleyici Koleksiyonu (aka gcc), bir uzantı olarak ondalık basamaklar için destek sağlar

Referanslar

  1. ^ http://msdn.microsoft.com/en-us/library/364x0z75.aspx
  2. ^ "Ondalık — Ondalık sabit nokta ve kayan nokta aritmetiği — Python 3.10.0 belgeleri" .
  3. ^ "Veri yönetimi" .
  4. ^ "Arşivlenmiş kopya" . Arşivlenmiş orijinal 2012-08-09 tarihinde . 2012-07-28 alındı .CS1 bakımı: başlık olarak arşivlenmiş kopya ( bağlantı )
  5. ^ "GCC Kılavuzu" . 6.13 Ondalık Kayan Tipler.