IEEE 754 - IEEE 754

Kayan Nokta Aritmetiği için IEEE Standardı (IEEE 754) bir teknik standart için kayan nokta aritmetiği tarafından 1985 yılında kuruldu Elektrik ve Elektronik Mühendisleri Enstitüsü (IEEE). Standart birçok sorunu ele aldı güvenilir bir şekilde kullanılmalarını zorlaştıran çeşitli kayan nokta uygulamalarında bulundu ve taşınabilir. Birçok donanım kayan nokta birimleri IEEE 754 standardını kullanın.

Standart şunları tanımlar:

  • aritmetik formatlar: setleri ikili ve ondalık sonlu sayılardan oluşan kayan nokta verileri (dahil işaretli sıfırlar ve normal altı sayılar ), sonsuzluklar ve özel "sayı değil" değerleri (NaN'ler )
  • değişim formatları: Kayan nokta verilerini verimli ve kompakt bir biçimde değiştirmek için kullanılabilen kodlamalar (bit dizeleri)
  • yuvarlama kuralları: aritmetik ve dönüştürmeler sırasında sayıları yuvarlarken tatmin edilecek özellikler
  • operasyonlar: aritmetik ve diğer işlemler (örneğin trigonometrik fonksiyonlar ) aritmetik formatlarda
  • istisna işleme: istisnai koşulların göstergeleri (örneğin sıfıra bölüm taşma vb.)

IEEE 754-2008 Ağustos 2008'de yayınlanan, orijinalin neredeyse tamamını içerir IEEE 754-1985 standart artı IEEE 854-1987 Radiksten Bağımsız Kayan Nokta Aritmetiği Standardı. Güncel sürüm IEEE 754-2019, Temmuz 2019'da yayınlandı.[1] Önceki sürümün küçük bir revizyonudur ve temelde açıklamaları, kusur düzeltmelerini ve yeni önerilen işlemleri içerir.

Standart geliştirme

Kayan nokta aritmetiği için ilk standart, IEEE 754-1985, 1985 yılında yayınlandı. Yalnızca ikili kayan nokta aritmetiğini kapsıyordu.

Yeni bir versiyon, IEEE 754-2008, yedi yıllık bir gözden geçirme sürecini takiben Ağustos 2008'de yayınlandı, Dan Zuras başkanlığında ve editörü Mike Cowlishaw. Hem IEEE 754-1985'in (ikili kayan nokta aritmetiği) hem de IEEE 854-1987 Radiksten Bağımsız Kayan Nokta Aritmetiği Standardı. Orijinal standarttaki ikili biçimler bu yeni standarda, üç yeni temel biçimle birlikte, bir ikili ve iki ondalık biçime dahil edilmiştir. Mevcut standarda uymak için, bir uygulama hem aritmetik format hem de değişim formatı olarak temel formatlardan en az birini uygulamalıdır.

Uluslararası standart ISO / IEC / IEEE 60559: 2011 (IEEE 754-2008 ile aynı içeriğe sahip) aracılığıyla benimsenmesi için onaylanmıştır JTC1 ISO / IEEE PSDO Anlaşması kapsamında / SC 25[2] ve yayınlandı.[3]

Temmuz 2019'da yayınlanan mevcut sürüm IEEE 754-2019, Eylül 2015'te David G. Hough başkanlığında ve Mike Cowlishaw tarafından düzenlenen bir revizyon sürecinin ardından IEEE 754-2008'den türetilmiş ve onun yerini almıştır. Esas olarak açıklamaları içerir (ör. Genel sipariş toplamı) ve kusur düzeltmeleri (ör. minNum), ancak bazı yeni önerilen işlemleri de içerir (ör. artırılmış).[4][5]

Uluslararası standart ISO / IEC 60559: 2020 (IEEE 754-2019 ile aynı içeriğe sahip) aracılığıyla benimsenmesi için onaylanmıştır JTC1 / SC 25 ve yayınlandı.[6]

Biçimler

IEEE 754 biçim "sayısal değerlerin ve sembollerin bir dizi temsilidir". Bir format, setin nasıl kodlandığını da içerebilir.[7]

Bir kayan nokta biçimi şu şekilde belirtilir:

  • bir baz (aynı zamanda kök) b, IEEE 754'te 2 (ikili) veya 10 (ondalık);
  • bir hassasiyet p;
  • üs aralığı emin -e emax, ile emin = 1 − emax tüm IEEE 754 formatları için.

Bir format şunları içerir:

  • Üç tamsayı ile tanımlanabilen sonlu sayılar: s = a işaret (sıfır veya bir), c = a anlam (veya katsayı) en fazla p tabanda yazıldığında rakamlar b (yani, 0 ila bp - 1) ve q = bir üs öyle ki eminq + p − 1 ≤ emax. Böyle sonlu bir sayının sayısal değeri (−1)s × c × bq.[a] Dahası, adı verilen iki sıfır değeri vardır işaretli sıfırlar: işaret biti sıfırın +0 (pozitif sıfır) veya 0 (negatif sıfır) olduğunu belirtir.
  • İki sonsuzluk: + ∞ ve −∞.
  • İki çeşit NaN (bir-sayı değil): sessiz bir NaN (qNaN) ve bir sinyal veren NaN (sNaN).

Örneğin, eğer b = 10, p = 7 ve emax = 96, sonra emin = −95, anlamlı ve 0 ≤ karşılar c9999999ve üs −101 ≤'yi sağlar q 90. Sonuç olarak, temsil edilebilecek en küçük sıfır olmayan pozitif sayı 1 × 10'dur.−101ve en büyüğü 9999999 × 10'dur90 (9.999999×1096), yani tam sayı aralığı −9,999999 × 10'dur96 9.999999 × 10 ile96. Sayılar -b1−emax ve b1−emax (burada −1 × 10−95 ve 1 × 10−95) en küçük olanlardır (büyüklük olarak) normal sayılar; bu en küçük sayılar arasındaki sıfır olmayan sayılar denir normal altı sayılar.

Bellekte temsil ve kodlama

Bazı sayılar birkaç olası üstel biçim temsiline sahip olabilir. Örneğin, eğer b = 10 ve p = 7, sonra −12.345, −12345 × 10 ile temsil edilebilir−3, −123450×10−4ve −1234500 × 10−5. Bununla birlikte, aritmetik işlemler gibi çoğu işlem için sonuç (değer), girdilerin temsiline bağlı değildir.

Ondalık biçimler için, herhangi bir gösterim geçerlidir ve bu gösterimlerin kümesi a grup. Bir sonucun birden fazla temsili olabileceği durumlarda, standart, kohortun hangi üyesinin seçildiğini belirtir.

İkili formatlar için, temsil, değerin tam olarak temsil edilmesine izin veren en küçük temsil edilebilir üs seçilerek benzersiz hale getirilir. Dahası, üs doğrudan temsil edilmez, ancak temsil edilebilen en küçük üssün 1 olarak temsil edilmesi için bir önyargı eklenir ve 0 normal altı sayılar için kullanılır. Normal aralıktaki bir üslü sayılar için (üs alanı ne tümü ne de tümü sıfırdır), anlamın baş biti her zaman 1 olacaktır. Sonuç olarak, bellek kodlamasında açık bir şekilde mevcut olmaktan ziyade bir öndeki 1 ima edilebilir, ve standart altında, anlamın açıkça temsil edilen kısmı 0 ile 1 arasında olacaktır. Bu kural denir. öncü bit kuralı, örtük bit kuralıveya gizli bit kuralı. Bu kural, ikili biçimin fazladan bir duyarlığa sahip olmasını sağlar. Baştaki bit kuralı, normal üs aralığının dışında bir üsse sahip oldukları ve en küçük normal sayılar için kullanıldığı gibi temsil edilen en küçük üs tarafından ölçeklendiği için normal altı sayılar için kullanılamaz.

Birden fazla kodlama olasılığı nedeniyle (en azından adı verilen formatlarda) değişim formatları), bir NaN başka bilgiler de taşıyabilir: bir işaret biti (anlamı yoktur, ancak bazı işlemler tarafından kullanılabilir) ve bir yük, NaN'nin kaynağını belirten teşhis bilgileri için tasarlanmıştır (ancak yükün başka kullanımları olabilir, örneğin NaN-boks[8][9][10]).

Temel ve değişim formatları

Standart, sayısal tabanları ve değişim kodlamasında kullanılan bit sayısı için adlandırılan beş temel biçimi tanımlar. Üç adet ikili kayan noktalı temel biçim (32, 64 veya 128 bit ile kodlanmış) ve iki ondalık kayan nokta temel biçimi (64 veya 128 bit ile kodlanmış) vardır. ikili32 ve ikili64 biçimler tek ve çift formatları IEEE 754-1985 sırasıyla. Uygun bir uygulama, temel formatlardan en az birini tam olarak uygulamalıdır.

Standart ayrıca şunları tanımlar: değişim formatları, bu temel formatları genelleyen.[11] İkili formatlar için, önde gelen bit kuralı gereklidir. Aşağıdaki tablo en küçük değişim formatlarını (temel olanlar dahil) özetlemektedir.

İsimYaygın isimBazÖnemli bitler[b] veya rakamlarOndalık basamakÜs bitleriOndalık E maxÜs yanlılığı[12]E minE maxNotlar
ikili16Yarım hassasiyet2113.3154.5124−1 = 15−14+15temel değil
ikili32Tek hassasiyet2247.22838.2327−1 = 127−126+127
ikili64Çift hassasiyet25315.9511307.95210−1 = 1023−1022+1023
ikili128Dört kat hassasiyet211334.02154931.77214−1 = 16383−16382+16383
ikili256Octuple hassasiyeti223771.341978913.2218−1 = 262143−262142+262143temel değil
ondalık3210777.5896101−95+96temel değil
ondalık641016169.58384398−383+384
ondalık 12810343413.5861446176−6143+6144

Yukarıdaki tabloda listelenen minimum üslerin normal sayılar için olduğuna dikkat edin; özel normal altı sayı temsil, daha küçük sayıların temsil edilmesine izin verir (biraz hassasiyet kaybıyla). Örneğin, binary64'te temsil edilebilecek en küçük pozitif sayı 2'dir.−1074; −1074 rakamına katkılar E min değeri −1022'yi ve 53 anlamlı bitten biri (2−1022 − (53 − 1) = 2−1074).

Ondalık basamaklar rakamlar × günlük10 temel. Bu, ondalık basamak sayısında yaklaşık bir hassasiyet verir.

Ondalık E max Emax × günlük10 temel. Bu, maksimum ondalık üssün yaklaşık bir değerini verir.

Binary32 (tek) ve binary64 (çift) biçimleri, günümüzde kullanılan en yaygın biçimlerden ikisidir. Aşağıdaki şekil, bir değer aralığında her iki format için mutlak kesinliği göstermektedir. Bu rakam, bir sayının beklenen değeri ve gerekli hassasiyet göz önüne alındığında uygun bir format seçmek için kullanılabilir.

10 aralığında binary32 ve binary64'ün doğruluğu−12 10'a kadar12


İçin bir düzen örneği 32 bit kayan nokta dır-dir

Float example.svg

ve 64 bit düzen benzer.

Genişletilmiş ve genişletilebilir hassas formatlar

Standart isteğe bağlı belirtir Genişletilmiş ve temel formatlardan daha fazla hassasiyet sağlayan genişletilebilir hassas formatlar.[13] Genişletilmiş bir hassas format, daha hassas ve daha fazla üs aralığı kullanarak temel bir formatı genişletir. Genişletilebilir hassas bir format, kullanıcının hassasiyeti ve üs aralığını belirlemesine olanak tanır. Bir uygulama, bu tür formatlar için seçtiği iç temsili kullanabilir; tanımlanması gereken tek şey parametreleridir (b, p, ve emax). Bu parametreler, temsil edebileceği sonlu sayılar kümesini (verilen radix için işaret, anlam ve üs kombinasyonları) benzersiz bir şekilde tanımlar.

Standart, dil standartlarının bir belirleme yöntemi sağlamasını önerir. p ve emax desteklenen her baz için b.[14] Standart, dil standartlarının ve uygulamalarının, her bir taban için desteklenen en büyük temel formattan daha büyük bir hassasiyete sahip genişletilmiş bir formatı desteklemesini önerir. b.[15] İki temel format arasında hassasiyete sahip genişletilmiş bir format için üs aralığı, bir sonraki daha geniş temel formatınki kadar büyük olmalıdır. Bu nedenle, örneğin 64 bitlik genişletilmiş duyarlıklı ikili sayı, en az 16383'lük bir "emax" a sahip olmalıdır. x87 80 bit genişletilmiş format bu gereksinimi karşılar.

Değişim formatları

Değişim formatları, belirli bir format için sabit uzunlukta bir bit dizisi kullanılarak kayan noktalı verilerin değişimi için tasarlanmıştır.

İkili

İkili kayan noktalı sayıların değişimi için, uzunluk 16 bit, 32 bit, 64 bit ve 32 bit ≥ 128'in herhangi bir katı[c] tanımlanmıştır. 16 bitlik format, küçük sayıların değişimi veya depolanması için tasarlanmıştır (örneğin, grafikler için).

Bu ikili değişim formatları için kodlama şeması, IEEE 754-1985 ile aynıdır: bir işaret biti, ardından w üs ötelemesini a ile açıklayan üs bitleri önyargı, ve p - Anlamını tanımlayan 1 bit. Bir için üs alanının genişliği k-bit biçimi şu şekilde hesaplanır: w = yuvarlak (4 günlük2(k)) - 13. Mevcut 64- ve 128-bit formatlar bu kuralı izler, ancak 16- ve 32-bit formatları bu formülün sağlayacağından (sırasıyla 3 ve 7) daha fazla üslü bitlere (sırasıyla 5 ve 8) sahiptir.

IEEE 754-1985'te olduğu gibi, önyargılı üs alanı, sonsuzluğu (sondaki anlamlı alan = 0) veya bir NaN'yi (sondaki anlamlı ve field 0) belirtmek için 1 bitin tümü ile doldurulur. NaN'ler için, sessiz NaN'ler ve sinyal veren NaN'ler, yalnızca sondaki anlam ve alanın en önemli biti kullanılarak ayırt edilir,[d] ve yük kalan bitlerde taşınır.

Ondalık

Ondalık kayan noktalı sayıların değişimi için, 32 bitin herhangi bir katının değişim formatları tanımlanır. İkili değiş tokuşta olduğu gibi, ondalık değişim biçimleri için kodlama şeması, işareti, üssü ve anlamlılığı kodlar. İki farklı bit seviyesinde kodlama tanımlanmıştır ve kullanımdaki kodlamanın bazı harici göstergelerinin gerekli olabileceği gerçeği nedeniyle değişim karmaşıktır.

İki seçenek, anlamlılığın, kullanılarak sıkıştırılmış bir ondalık basamak dizisi olarak kodlanmasına izin verir. yoğun şekilde paketlenmiş ondalık veya alternatif olarak ikili tam sayı. İlki, standardın doğrudan donanım uygulaması için daha uygundur, ikincisi ise ikili bir bilgisayardaki yazılım öykünmesi için daha uygundur. Her iki durumda da, kodlanabilecek sayı kümesi (işaret, anlamlılık ve üs kombinasyonları) aynıdır ve özel değerler (Minimum üs ile ± sıfır, ± sonsuz, sessiz NaN'ler ve sinyal veren NaN'ler) aynı kodlamalara sahiptir.

Yuvarlama kuralları

Standart, beş yuvarlama kuralı tanımlar. İlk iki kural en yakın değere yuvarlanır; diğerleri aranır yönlendirilmiş yuvarlamalar:

En yakına yuvarlama

  • En yakına yuvarla, çiftle bağlar - en yakın değere yuvarlar; sayı ortasına denk gelirse, en az anlamlı basamakla en yakın değere yuvarlanır; bu, ikili kayan nokta için varsayılan ve ondalık için önerilen varsayılandır.
  • En yakına yuvarla, sıfırdan uzağa bağlar - en yakın değere yuvarlar; sayı ortasına denk gelirse, üstüne en yakın değere (pozitif sayılar için) veya altına (negatif sayılar için) yuvarlanır; bu, ondalık kayan nokta için bir seçenek olarak tasarlanmıştır.

Yönlendirilmiş yuvarlamalar

  • 0'a doğru yuvarla - sıfıra doğru yuvarlama (aynı zamanda kesme).
  • + ∞'a doğru yuvarlayın - pozitif sonsuza doğru yuvarlama (aynı zamanda yuvarlama veya tavan).
  • −∞'a doğru yuvarla - negatif sonsuza doğru yuvarlama (aynı zamanda aşağı yuvarlama veya zemin).
IEEE 754 kurallarını kullanarak tamsayılara yuvarlama örneği
ModÖrnek değer
+11.5+12.5−11.5−12.5
en yakına, hatta bağlar+12.0+12.0−12.0−12.0
en yakına, sıfırdan uzağa bağlar+12.0+13.0−12.0−13.0
0'a doğru+11.0+12.0−11.0−12.0
+ ∞'a doğru+12.0+13.0−11.0−12.0
−∞'a doğru+11.0+12.0−12.0−13.0

Aksi belirtilmedikçe, bir işlemin kayan nokta sonucu, sonsuz kesinlikteki (matematiksel) sonuca yuvarlama işlevi uygulanarak belirlenir. Böyle bir operasyon olduğu söyleniyor doğru yuvarlatılmış. Bu gereksinim denir doğru yuvarlama.[16]

Gerekli işlemler

Desteklenen bir aritmetik format için gerekli işlemler (temel formatlar dahil) şunları içerir:

  • Aritmetik işlemler (toplama, çıkarma, çarpma, bölme, karekök, kaynaşmış çarpma-ekle, kalan)[17][18]
  • Dönüşümler (biçimler arasında, dizelere ve dizelerden, vb.)[19][20]
  • Ölçekleme ve (ondalık için) niceleme[21][22]
  • İşaretin kopyalanması ve değiştirilmesi (abs, negate, vb.)[23]
  • Karşılaştırmalar ve toplam sıralama[24][25]
  • NaN'lerin sınıflandırılması ve test edilmesi, vb.[26]
  • Bayrakları test etme ve ayarlama[27]
  • Çeşitli işlemler.[belirtmek ]

Karşılaştırma tahminleri

Standart, bir kayan noktalı veriyi desteklenen aritmetik formatta diğeriyle karşılaştırmak için karşılaştırma tahminleri sağlar.[28] NaN ile yapılan herhangi bir karşılaştırma sırasız olarak değerlendirilir. −0 ve +0 eşit olarak karşılaştırılır.

Toplam sıralama koşulu

Standart bir dayanak sağlar Genel sipariş toplamı, tanımlayan toplam sipariş desteklenen aritmetik biçimin kanonik üyelerinde.[29] Doğrulama, bir kayan noktalı sayı diğerinden daha az olduğunda karşılaştırma tahminlerine katılır. Genel sipariş toplamı yüklem, bir formattaki tüm kodlamalara toplam sıralama empoze etmez. Özellikle, kodlamalardan biri veya her ikisi de kanonik olmadığında olduğu gibi aynı kayan nokta gösteriminin farklı kodlamaları arasında ayrım yapmaz.[30] IEEE 754-2019 aşağıdakilerin açıklamalarını içerir: Genel sipariş toplamı.

İstisna işleme

Standart, her biri bir varsayılan değer döndüren ve istisna oluştuğunda ortaya çıkan karşılık gelen bir durum bayrağına sahip beş istisna tanımlar.[e] Başka bir istisna işleme gerekmez, ancak varsayılan olmayan ek alternatifler önerilir (bkz. § Alternatif istisna işleme ).

Olası beş istisna şunlardır:

  • Geçersiz işlem: matematiksel olarak tanımsız, Örneğin., negatif bir sayının karekökü. Varsayılan olarak qNaN döndürür.
  • Sıfıra bölme: sonlu işlenenler üzerinde bir işlem kesin bir sonsuz sonuç verir, Örneğin., 1/0 veya log (0). Varsayılan olarak, ± sonsuz döndürür.
  • Taşma: bir sonuç doğru şekilde temsil edilemeyecek kadar büyük (yani, sınırsız üs aralığı olan üssü şundan daha büyük olur: emax). Varsayılan olarak, en yakına yuvarlama modları için ± sonsuz döndürür (ve yönlendirilmiş yuvarlama modları için yuvarlama kurallarını izler).
  • Alt akış: sonuç çok küçük (normal aralığın dışında) ve kesin değil. Varsayılan olarak, bir normal altı veya sıfır (yuvarlama kurallarına uyarak).
  • Hatasız: tam (yani, yuvarlak olmayan) sonuç tam olarak gösterilemez. Varsayılan olarak, doğru şekilde yuvarlanmış sonucu döndürür.

Bunlar, IEEE 754-1985'te tanımlananlarla aynı beş istisnadır, ancak sıfıra bölüm istisna, bölüm dışındaki operasyonlara genişletildi.

Ondalık kayan nokta için ek istisnalar vardır:[31][32]

  • Sabitlendi: bir sonucun üssü, hedef biçim için çok büyük. Varsayılan olarak, üssü kullanılabilir en büyük değere düşürmek için katsayıya sondaki sıfırlar eklenecektir. Bu mümkün değilse (çünkü bu, gereken basamak sayısının hedef biçiminden daha fazla olmasına neden olur), bir taşma istisnası oluşur.
  • Yuvarlanmış: Bir sonucun katsayısı, hedef biçimin sağladığından daha fazla rakam gerektirir. Sıfır olmayan herhangi bir rakam atılırsa, kesin olmayan bir istisna bildirilir.

Ek olarak, işlenenlerden biri sonsuz olduğunda veya sonuç hedef formata uymadığında niceleme gibi işlemler de geçersiz işlem istisnası sinyali verir.[33]

Öneriler

Alternatif istisna işleme

Standart, kullanıcı tanımlı varsayılan değerlerin ve tuzakların (kontrol akışını bir şekilde değiştiren istisnalar) ve dene / yakala gibi akışı kesintiye uğratan diğer istisna işleme modellerinin de dahil olduğu çeşitli biçimlerde isteğe bağlı istisna işlemeyi önerir. Tuzaklar ve diğer istisna mekanizmaları, IEEE 754-1985'te olduğu gibi isteğe bağlı kalır.

Önerilen işlemler

Standarttaki 9. Madde ek matematiksel işlemler önermektedir[34] bu dil standartları tanımlamalıdır.[35] Standarda uymak için hiçbiri gerekli değildir.

Doğru şekilde yuvarlanması gereken önerilen aritmetik işlemler:[36]

asinPi, acosPi ve tanPi işlevler IEEE 754-2008 standardının bir parçası değildi çünkü daha az gerekli oldukları yönünde bir his vardı.[37] İlk ikisi en azından bir paragrafta belirtildi, ancak bu bir hata olarak kabul edildi[4] 2019 revizyonunda eklenene kadar.

İşlemler ayrıca dinamik mod yuvarlama yönünün ayarlanması ve erişimini içerir,[38] ve toplam, ölçeklendirilmiş ürün gibi uygulama tanımlı vektör indirgeme işlemleri ve nokta ürün, doğruluğu standart tarafından belirtilmeyen.[39]

2019 yılı itibarıyla artırılmış aritmetik işlemler[40] ikili formatlar için de tavsiye edilir. Toplama, çıkarma ve çarpma için belirtilen bu işlemler, formatta doğru şekilde en yakına yuvarlanmış bir sonuç ve tam olarak formatta gösterilebilen hata teriminden oluşan bir çift değer üretir. Standardın yayınlandığı tarihte, hiçbir donanım uygulaması bilinmemektedir, ancak çok benzer işlemler, iyi bilinen algoritmalar kullanılarak yazılımda zaten uygulanmıştır. Standardizasyonlarının geçmişi ve motivasyonu bir arka plan belgesinde açıklanmıştır.[41][42]

2019 itibariyle, önceden gerekli olan minNum, maxNum, minNumMag ve maxNumMag IEEE 754-2008'de artık ilişkisiz olmaları nedeniyle silinmiştir. Bunun yerine, iki set yeni minimum ve maksimum işlemler[43] tavsiye edilir. İlk set şunları içerir: minimum, minimumNumber, maximum ve maximumNumber. İkinci set şunları içerir: minimumMagnitude, minimumMagnitudeNumber, maximumMagnitude ve maximumMagnitudeNumber. Bu değişikliğin geçmişi ve motivasyonu bir arka plan belgesinde açıklanmıştır.[44]

İfade değerlendirmesi

Standart, dil standartlarının işlem dizilerinin anlamlarını nasıl belirlemesi gerektiğini önerir ve bir sonucun değerini değiştiren gerçek anlamların ve optimizasyonların inceliklerini belirtir. Aksine, önceki 1985 derleyiciler arasında tutarsız davranışa veya tek bir derleyicide farklı optimizasyon seviyelerine yol açan, belirtilmemiş dil arayüzünün standart sol yönlerinin sürümü.

Programlama dilleri, bir kullanıcının her bir taban için ara ifade hesaplamaları için minimum bir kesinlik belirlemesine izin vermelidir. Bu, standartta "tercih edilen Genişlik" olarak adlandırılır ve bunu her blok için ayarlamak mümkün olmalıdır. İfadelerdeki ara hesaplamalar hesaplanmalı ve işlenenlerin maksimum genişliği ve ayarlanmışsa tercih edilen genişlik kullanılarak tüm geçiciler kaydedilmelidir. Bu nedenle, örneğin bir derleyici, x87 kayan noktalı donanımın, ara hesaplamaların kullanması gerektiğini belirten bir aracı olmalıdır. çift ​​genişletilmiş format. Bir değişkenin saklanan değeri, değişkene yuvarlama ve atamadan önceki herhangi bir öncül yerine, sonraki ifadeleri değerlendirirken her zaman kullanılmalıdır.

Yeniden üretilebilirlik

IEEE 754-1985, uygulamalarda birçok varyasyona (bazı değerlerin kodlanması ve belirli istisnaların tespiti gibi) izin verdi. IEEE 754-2008 bunların çoğunu güçlendirdi, ancak birkaç varyasyon hala var (özellikle ikili formatlar için). Yeniden üretilebilirlik maddesi, dil standartlarının yeniden üretilebilir programlar (yani, bir dilin tüm uygulamalarında aynı sonucu üretecek programlar) yazmak için bir araç sağlamasını tavsiye eder ve tekrarlanabilir sonuçlar elde etmek için yapılması gerekenleri açıklar.

Karakter gösterimi

Standart, işlemlerin temel formatlar arasında dönüştürülmesini gerektirir ve dış karakter dizisi biçimler.[45] Tüm biçimler için ondalık karakter biçimine ve biçiminden dönüşümler gereklidir. Bir dış karakter dizisine dönüştürme, çift sayıya yuvarlama kullanarak geri dönüştürmenin orijinal sayıyı geri kazanacağı şekilde olmalıdır. Sessiz bir NaN'nin veya sinyal ileten NaN'nin yükünü korumaya gerek yoktur ve harici karakter dizisinden dönüştürme, bir sinyalleşme NaN'sini sessiz bir NaN'ye dönüştürebilir.

Orijinal ikili değer, aşağıdakiler kullanılarak ondalık sayıya dönüştürülerek korunacaktır:[46]

  • İkili16 için 5 ondalık hane,
  • Binary32 için 9 ondalık hane,
  • Binary64 için 17 ondalık basamak,
  • İkili128 için 36 ondalık basamak.

Diğer ikili biçimler için gerekli ondalık basamak sayısı

nerede p ikili formattaki anlamlı bitlerin sayısıdır, ör. İkili 256 için 237 bit.

(Not: bir uygulama sınırı olarak doğru yuvarlama, yalnızca desteklenen en büyük ikili biçim için yukarıdaki ondalık basamak sayısı artı 3 için garanti edilir. Örneğin, ikili32 desteklenen en büyük ikili biçimse, ondalık harici diziden bir dönüştürme ile İkili32'ye dönüştürüldüğünde 12 ondalık basamağın doğru şekilde yuvarlanması garanti edilir; ancak 13 ondalık basamaktan oluşan bir dizinin dönüştürülmesi söz konusu değildir; ancak, standart, uygulamaların böyle bir sınır koymamasını önerir.)

Ondalık kayan nokta formatı kullanırken, ondalık gösterim aşağıdakiler kullanılarak korunacaktır:

  • Decimal32 için 7 ondalık hane,
  • Decimal64 için 16 ondalık hane,
  • Ondalık 128 için 34 ondalık basamak.

İkiliden ondalık ve ondalıktan ikiliye doğru yuvarlatılmış dönüşüm için kodlu algoritmalar Gay tarafından tartışılmaktadır.[47] ve test için - Paxson ve Kahan tarafından.[48]

Ayrıca bakınız

Notlar

  1. ^ Örneğin, taban 10 ise, işaret 1 (negatif gösteren), anlamlı ve 12345 ve üs if3 ise, bu durumda sayının değeri (−1)1 × 12345 × 10−3 = −1 × 12345 × 0.001 = −12.345.
  2. ^ örtük bit dahil (normal sayılar için her zaman 1'e ve normal altı sayılar için 0'a eşittir. Bu örtük bit bellekte depolanmaz), ancak işaret bitini içermez.
  3. ^ Ondalığın aksine, 96 bit uzunluğunda ikili değişim formatı yoktur. Böyle bir formata, değişim olmayan bir format olarak hala izin verilmektedir.
  4. ^ Standart, NaN'leri sinyalleme için 0'ı, sessiz NaN'ler için 1'i önerir, böylece bir sinyalleşme NaN'leri sadece bu biti 1'e değiştirerek susturulabilirken, tersi bir sonsuzluk kodlamasını verebilir.
  5. ^ Bazı alt taşma durumlarında bayrak kaldırılmaz.

Referanslar

  1. ^ IEEE 754 2019
  2. ^ "FW: ISO / IEC / IEEE 60559 (IEEE Std 754-2008)". grouper.ieee.org. Arşivlenen orijinal 2017-10-27 tarihinde. Alındı 2018-04-04.
  3. ^ "ISO / IEC / IEEE 60559: 2011 - Bilgi teknolojisi - Mikroişlemci Sistemleri - Kayan Nokta aritmetiği". www.iso.org. Alındı 2018-04-04.
  4. ^ a b Cowlishaw, Mike (2013-11-13). "IEEE 754-2008 hata verileri". speleotrove.com. Alındı 2020-01-24.
  5. ^ "ANSI / IEEE Std 754-2008 revizyonu". ucbtest.org. Alındı 2018-04-04.
  6. ^ "ISO / IEC 60559: 2020 - Bilgi teknolojisi - Mikroişlemci Sistemleri - Kayan Nokta aritmetiği". www.iso.org. Alındı 2020-10-25.
  7. ^ IEEE 754 2008, §2.1.27.
  8. ^ "SpiderMonkey Internals". developer.mozilla.org. Alındı 2018-03-11.
  9. ^ Klemens, Ben (Eylül 2014). 21. Yüzyıl C: Yeni Okuldan C İpuçları. O'Reilly Media, Incorporated. s. 160. ISBN  9781491904442. Alındı 2018-03-11.
  10. ^ "zuiderkwast / nanbox: C'de NaN-boks". GitHub. Alındı 2018-03-11.
  11. ^ IEEE 754 2008, §3.6.
  12. ^ Cowlishaw, Mike. "Ondalık Aritmetik Kodlamalar" (PDF). IBM. Alındı 2015-08-06.
  13. ^ IEEE 754 2008, §3.7.
  14. ^ IEEE 754 2008, §3.7 şunu belirtir: "Dil standartları, desteklenen her taban için genişletilebilir hassasiyeti destekleyen mekanizmaları tanımlamalıdır."
  15. ^ IEEE 754 2008, §3.7 şunu belirtir: "Dil standartları veya uygulamaları, bu tabanda desteklenen en geniş temel biçimi genişleten genişletilmiş bir duyarlılık biçimini desteklemelidir."
  16. ^ IEEE 754 2019, §2.1
  17. ^ IEEE 754 2008, §5.3.1
  18. ^ IEEE 754 2008, §5.4.1
  19. ^ IEEE 754 2008, §5.4.2
  20. ^ IEEE 754 2008, §5.4.3
  21. ^ IEEE 754 2008, §5.3.2
  22. ^ IEEE 754 2008, §5.3.3
  23. ^ IEEE 754 2008, §5.5.1
  24. ^ IEEE 754 2008, §5.10
  25. ^ IEEE 754 2008, §5.11
  26. ^ IEEE 754 2008, §5.7.2
  27. ^ IEEE 754 2008, §5.7.4
  28. ^ IEEE 754 2019, §5.11
  29. ^ IEEE 754 2019, §5.10
  30. ^ IEEE 754 2019, §5.10
  31. ^ "9.4. Ondalık - Ondalık sabit nokta ve kayan nokta aritmetiği - Python 3.6.5 belgeleri". docs.python.org. Alındı 2018-04-04.
  32. ^ "Ondalık Aritmetik - Olağanüstü koşullar". speleotrove.com. Alındı 2018-04-04.
  33. ^ IEEE 754 2008, §7.2 (h)
  34. ^ IEEE 754 2019, §9.2
  35. ^ IEEE 754 2008 Madde 9
  36. ^ IEEE 754 2019, §9.2.
  37. ^ "Re: Eksik işlevler tanPi, asinPi ve acosPi". grouper.ieee.org. Arşivlenen orijinal 2017-07-06 tarihinde. Alındı 2018-04-04.
  38. ^ IEEE 754 2008, §9.3.
  39. ^ IEEE 754 2008, §9.4.
  40. ^ IEEE 754 2019, §9.5.
  41. ^ Riedy, Jason; Demmel, James. "IEEE-754 2018 için Önerilen Artırılmış Aritmetik İşlemler" (PDF). 25th IEEE Symbosium on Computer Aritmetica (ARITH 2018). s. 49–56. Arşivlendi (PDF) 2019-07-23 tarihinde orjinalinden. Alındı 2019-07-23.
  42. ^ "2019 için hedeflenen 754 Düzeltme". 754r.ucbtest.org. Alındı 2019-07-23.
  43. ^ IEEE 754 2019, §9.6.
  44. ^ Chen, David. "MinNum ve MaxNum İşlemlerinin IEEE 754-2019'dan Kaldırılması" (PDF). grouper.ieee.org. Alındı 2020-02-05.
  45. ^ IEEE 754 2008, §5.12.
  46. ^ IEEE 754 2008, §5.12.2.
  47. ^ Gay, David M. (1990-11-30). "Doğru şekilde yuvarlanmış ikili ondalık ve ondalık ikili dönüşümler". Sayısal Analiz Yazısı. Murry Hill, NJ, ABD: AT&T Laboratories. 90-10. Alıntı dergisi gerektirir | günlük = (Yardım)
  48. ^ Paxson, Vern; Kahan, William (1991-05-22). "IEEE Ondalık-İkili Dönüştürmeyi Test Etmek İçin Bir Program". El yazması. CiteSeerX  10.1.1.144.5889. Alıntı dergisi gerektirir | günlük = (Yardım)

Standartlar

İkincil referanslar

daha fazla okuma

Dış bağlantılar