Dörtlü hassas kayan nokta biçimi - Quadruple-precision floating-point format

Olarak işlem , dört hassas (ya da dört hassas ) bir ikili kayan nokta tabanlı bilgisayar numarası formatı , en azından iki defa, 53-bit hassasiyetle 16 bayt (128 bit) kaplar çift hassas .

Bu 128-bit dörtlü kesinlik, yalnızca çift hassasiyetten daha yüksek sonuçlar gerektiren uygulamalar için değil, aynı zamanda birincil bir işlev olarak, orta seviyedeki taşma ve yuvarlama hatalarını en aza indirerek çift hassasiyetli sonuçların daha güvenilir ve doğru bir şekilde hesaplanmasını sağlamak için tasarlanmıştır. hesaplamalar ve sıfırdan değişkenler. Orijinal IEEE-754 kayan nokta standardının birincil mimarı William Kahan , "Şimdilik 10 baytlık Genişletilmiş biçim , ekstra hassas aritmetiğin değeri ile hızlı çalışması için uygulamanın fiyatı arasında tolere edilebilir bir uzlaşmadır; çok yakında iki daha fazla bayt hassasiyet tolere edilebilir hale gelecek ve nihayetinde 16 baytlık bir format olacak... Daha geniş hassasiyete doğru bu tür kademeli bir evrim , Kayan Nokta Aritmetiği için IEEE Standard 754 çerçevelendiğinde zaten göz önündeydi."

Olarak IEEE 754-2008 128 bit baz-2 formatı resmi olarak adlandırılır binary128 .

IEEE 754 dörtlü hassas ikili kayan nokta biçimi: ikili128

IEEE 754 standardı, bir ikili128'i aşağıdakilere sahip olarak belirtir :

Bu, 33 ila 36 arasında önemli ondalık basamak hassasiyeti sağlar. En fazla 33 anlamlı basamağa sahip bir ondalık dize, IEEE 754 dörtlü kesinlik gösterimine dönüştürülür ve ardından aynı sayıda basamaklı bir ondalık dizeye dönüştürülürse, nihai sonuç orijinal dizeyle eşleşmelidir. Bir IEEE 754 dörtlü kesinlikli sayı, en az 36 anlamlı basamaklı bir ondalık diziye dönüştürülür ve ardından dörtlü duyarlık gösterime dönüştürülürse, nihai sonuç orijinal sayıyla eşleşmelidir.

Üs tüm sıfırlarla saklanmadıkça, biçim 1 değerine sahip örtük bir ön bit ile yazılır. Bu nedenle, sadece 112 bit significand bellek biçiminde görünür, ancak toplam hassas 113 bit (yaklaşık 34 ondalık hane: bir giriş 10 (2 113 ) ≈ 34,016 ). Bitler şu şekilde düzenlenir:

Bir işaret biti, 15 bitlik bir üs ve 112 bitlik bir anlamlı

Bir ikili256 , 237 bit (yaklaşık 71 ondalık basamak) ve 262143 üs sapması gibi önemli bir kesinliğe sahip olacaktır.

Üs kodlaması

Dörtlü kesinlikli ikili kayan nokta üssü, sıfır ofseti 16383 olmak üzere bir ofset ikili gösterimi kullanılarak kodlanır ; bu, IEEE 754 standardında üs yanlılığı olarak da bilinir.

  • E min = 0001 16 − 3FFF 16 = -16382
  • E maks = 7FFE 16 − 3FFF 16 = 16383
  • Üs sapması = 3FFF 16 = 16383

Bu nedenle, ofset ikili gösterimi tarafından tanımlandığı gibi, gerçek üssü elde etmek için, 16383'ün ofsetinin depolanan üste çıkarılması gerekir.

Depolanan üsler 0000 16 ve 7FFF 16 özel olarak yorumlanır.

Üs önemli ve sıfır önemli ve sıfır olmayan Denklem
0000 16 0 , -0 normal altı sayılar (-1) signbit x2 -16.382 x 0.significandbits 2
0001 16 , ..., 7FFE 16 normalleştirilmiş değer (-1) signbit × 2 exponentbits 2 - 16383 x 1.significandbits 2
7FFF 16 ± NaN (sessiz, sinyalizasyon)

Minimum kesinlikle pozitif (normalin altı ) değer 2 −16494 ≈ 10 −4965'tir ve yalnızca bir bit hassasiyete sahiptir. Minimum pozitif normal değer 2 −163823.3621 × 10 −4932'dir ve 113 bitlik bir hassasiyete sahiptir, yani ±2 −16494 de. Maksimum Temsil değeri 2 16384 2 - 162711,1897 x 10 4932 .

Dörtlü hassas örnekler

Bu örnekler, biraz verilmiştir temsil olarak, onaltılı kayan nokta değeri. Buna işaret, (önyargılı) üs ve önemli değer dahildir.

0000 0000 0000 0000 0000 0000 0000 000116 = 2−16382 × 2−112 = 2−16494
                                          ≈ 6.4751751194380251109244389582276465525 × 10−4966
                                            (smallest positive subnormal number)
0000 ffff ffff ffff ffff ffff ffff ffff16 = 2−16382 × (1 − 2−112)
                                          ≈ 3.3621031431120935062626778173217519551 × 10−4932
                                            (largest subnormal number)
0001 0000 0000 0000 0000 0000 0000 000016 = 2−16382
                                          ≈ 3.3621031431120935062626778173217526026 × 10−4932
                                            (smallest positive normal number)
7ffe ffff ffff ffff ffff ffff ffff ffff16 = 216383 × (2 − 2−112)
                                          ≈ 1.1897314953572317650857593266280070162 × 104932
                                            (largest normal number)
3ffe ffff ffff ffff ffff ffff ffff ffff16 = 1 − 2−113
                                          ≈ 0.9999999999999999999999999999999999037
                                            (largest number less than one)
3fff 0000 0000 0000 0000 0000 0000 000016 = 1 (one)
3fff 0000 0000 0000 0000 0000 0000 000116 = 1 + 2−112
                                          ≈ 1.0000000000000000000000000000000001926
                                            (smallest number larger than one)
c000 0000 0000 0000 0000 0000 0000 000016 = −2
0000 0000 0000 0000 0000 0000 0000 000016 = 0
8000 0000 0000 0000 0000 0000 0000 000016 = −0
7fff 0000 0000 0000 0000 0000 0000 000016 = infinity
ffff 0000 0000 0000 0000 0000 0000 000016 = −infinity
4000 921f b544 42d1 8469 898c c517 01b816 ≈ π
3ffd 5555 5555 5555 5555 5555 5555 555516 ≈ 1/3

Varsayılan olarak, 1/3 , anlamlıdaki tek sayıda bit nedeniyle çift ​​duyarlık gibi aşağı yuvarlar . Yani yuvarlama noktasının ötesindeki bitler , son sırada0101... bir birimin 1/2'sinden daha az olan bitlerdir .

Double-double aritmetik

Yaygın bir yazılım tekniği kullanılarak yaklaşık dört hassasiyet uygulamaya çiftleri arasında çift duyarlıklı değerlerinin bazen denir çift çift aritmetik . 53 bitlik anlamlılara sahip IEEE çift kesinlikli değer çiftlerini kullanan double-double aritmetiği, anlamlıları en az 2 × 53 = 106 bit olan sayılar üzerinde işlemler sağlar (aslında sınırlı üs nedeniyle en büyük değerlerin bazıları dışında 107 bit). aralığı), yalnızca IEEE ikili 128 dörtlü hassasiyetinin 113 bitlik değerinden biraz daha az hassastır. Double-double aralığı, esasen double-duble formatı ile aynı kalır, çünkü üs hala 11 bite sahiptir, bu, 15-bit IEEE dörtlü kesinlik üssünden önemli ölçüde düşüktür ( double-double için 1.8 × 10 308 aralığı). 1.2 × 10 4932 ikili 128 için).

Özellikle, çift-çift tekniğindeki bir çift-çift/dörtlü-hassasiyet değeri q , örtük olarak , her biri q'nun anlamının yarısını sağlayan iki çift-duyarlılık değeri x ve y'nin q = x + y toplamı olarak temsil edilir. . Yani ( x , y ) çifti q yerine kaydedilir ve q değerleri (+, −, ×, ...) üzerindeki işlemler x ve y değerleri üzerinde eşdeğer (ancak daha karmaşık) işlemlere dönüştürülür . Böylece, bu teknikte aritmetik, bir dizi çift kesinlik işlemine indirgenir; çift ​​duyarlıklı aritmetik yaygın olarak donanımda uygulandığından, çift-çift aritmetik tipik olarak daha genel keyfi kesinlikli aritmetik tekniklerinden önemli ölçüde daha hızlıdır .

Double-double aritmetiğin aşağıdaki özel özelliklere sahip olduğuna dikkat edin:

  • Değerin büyüklüğü azaldıkça ekstra kesinlik miktarı da azalır. Bu nedenle, normalleştirilmiş aralıktaki en küçük sayı çift kesinlikten daha dardır. Tam duyarlıklı en küçük sayı 1000...0 2 (106 sıfır) × 2 -1074 veya 1.000...0 2 (106 sıfır) × 2 −968'dir . Büyüklüğü 2 -1021'den küçük olan sayılar, çift ​​duyarlık ile karşılaştırıldığında ek kesinliğe sahip olmayacaktır.
  • Kesinlik bitlerinin gerçek sayısı değişebilir. Genel olarak, sayının düşük dereceli kısmının büyüklüğü, yüksek dereceli kısmın ULP'sinin yarısından büyük değildir. Düşük mertebeden parça, yüksek mertebeden parçanın yarısından küçük ULP ise, yüksek mertebeden ve düşük mertebeden sayıların anlamlısı arasında anlamlı bitler (tümü 0'lar veya tüm 1'ler) ima edilir. Anlamda sabit sayıda bit bulunmasına dayanan belirli algoritmalar, 128 bit uzunluğundaki çift sayılar kullanıldığında başarısız olabilir.
  • Yukarıdaki nedenden dolayı, 1'den büyük temsil edilebilen en küçük sayı olan 1 + 2 -1074 gibi değerleri temsil etmek mümkündür .

Double-double aritmetiğine ek olarak, herhangi bir daha yüksek hassasiyetli kayan nokta kitaplığı olmadan daha yüksek hassasiyet gerekiyorsa, triple-double veya dört-double aritmetiği oluşturmak da mümkündür. Sırasıyla üç (veya dört) çift kesinlik değerinin toplamı olarak temsil edilirler. Sırasıyla en az 159/161 ve 212/215 bitlik işlemleri temsil edebilirler.

Benzer bir teknik, iki dörtlü kesinlik değerinin toplamı olarak temsil edilen bir çift ​​dörtlü aritmetik üretmek için kullanılabilir . En az 226 (veya 227) bit ile işlemleri temsil edebilirler.

Uygulamalar

Dörtlü kesinlik, yazılımda genellikle çeşitli tekniklerle uygulanır (bu teknik IEEE dörtlü kesinliği uygulamasa da, yukarıdaki çift çift tekniği gibi), çünkü dörtlü hassasiyet için doğrudan donanım desteği 2016 itibariyle daha az yaygındır (bkz. " Donanım desteği " aşağıda). Dörtlü (veya daha yüksek) kesinlik elde etmek için genel keyfi kesinlikli aritmetik kitaplıkları kullanılabilir, ancak özel dörtlü kesinlik uygulamaları daha yüksek performans sağlayabilir.

Bilgisayar dili desteği

Ayrı bir soru, dörtlü kesinlikli türlerin bilgisayar programlama dillerine doğrudan ne ölçüde dahil edildiğidir .

Dört hassas belirtilen Fortran tarafından real(real128)(modülü iso_fortran_envkullanılmalıdır Fortran 2008, sabit real128ya da en işlemci 16'ya eşit olduğu) real(selected_real_kind(33, 4931)), veya standart olmayan bir şekilde REAL*16. (Dörtlü kesinlik REAL*16, örneğin , x86 , x86-64 ve Itanium mimarilerinde Intel Fortran Derleyicisi ve GNU Fortran derleyicisi tarafından desteklenir .)

İçin C programlama dili , belirttiğinden ISO / IEC 18661-3 TS (C değişimi ve genişletilmiş türleri için kayan nokta uzantıları) _Float128IEEE 754 dörtlü kesinlikli formatı (binary128) uygulayan türü olarak. Alternatif olarak, birkaç sistem ve derleyici içeren C / C++' da, uzun çift tip tarafından dörtlü kesinlik belirtilebilir , ancak bu dil tarafından gerekli değildir (yalnızca long doubleen az double.

x86 ve x86-64'te, en yaygın C/C++ derleyicileri long doubleya 80-bit genişletilmiş kesinlik (ör. GNU C Derleyici gcc ve bir anahtarlı Intel C++ derleyicisi/Qlong‑double ) olarak ya da basitçe çift kesinlik ile eşanlamlı olarak (ör. Microsoft Visual) uygulanır. C++ ), dörtlü kesinlik yerine. ARM 64-bit mimarisi (AArch64) için prosedür çağrısı standardı long double, bunun IEEE 754 dörtlü kesinlik formatına karşılık geldiğini belirtir . Diğer birkaç mimaride, bazı C/C++ derleyicileri long doubledörtlü hassasiyet olarak uygulanır , örneğin PowerPC'de gcc (double-double olarak) ve SPARC veya SPARC'ta Sun Studio derleyicileri . long doubleDörtlü kesinlik olmasa bile , bazı C/C++ derleyicileri bir uzantı olarak standart olmayan dörtlü kesinlik türünü sağlar. Örneğin, gcc, __float128x86, x86-64 ve Itanium CPU'lar için ve -mfloat128-donanım veya -mfloat128 seçeneklerini kullanarak PowerPC'de IEEE 128 bit kayan nokta olarak adlandırılan dörtlü kesinlikli bir tür sağlar ; ve Intel'in x86 ve x86-64 için C/C++ derleyicisinin bazı sürümleri, _Quad.

Kitaplıklar ve araç kutuları

  • GCC dört hassas matematik kütüphanesi, libquadmath sağlar __float128ve __complex128operasyonları.
  • Kuvvetlendirme çokduyarlıklı kütüphane Boost.Multiprecision için platformlar C ++ arayüzü birleşik sağlar __float128ve _Quadtürleri ve standart matematik kütüphane özel bir uygulama içermektedir.
  • MATLAB Çok Basamaklı Hesaplama Toolbox içinde dörtlü duyarlıklı hesaplamaları verir MATLAB . Temel aritmetik işlevselliğin yanı sıra sayısal yöntemler, yoğun ve seyrek lineer cebir içerir.
  • DoubleFloats paketi, Julia programlama dili için double-double hesaplamaları için destek sağlar.
  • doubledouble.py kitaplığı, Python'da double-double hesaplamalarına olanak tanır.
  • Mathematica, IEEE dörtlü kesinlik sayılarını destekler: 128 bit kayan noktalı değerler (Real128) ve 256 bit karmaşık değerler (Complex256).

Donanım desteği

IEEE dörtlü kesinlik, 1998'de IBM S/390 G5'e eklendi ve sonraki z/Architecture işlemcilerinde donanımda destekleniyor . IBM POWER9 CPU ( Power ISA 3.0 ), yerel 128 bit donanım desteğine sahiptir.

IEEE 128-bit kayan noktaların yerel desteği PA-RISC 1.0'da ve SPARC V8 ve V9 mimarilerinde tanımlanmıştır (örn. 2004 itibariyle donanımda hassas işlemler.

IEEE olmayan genişletilmiş kesinlik (128 bit depolama, 1 işaret biti, 7 üs biti, 112 kesir biti, 8 bit kullanılmamış) IBM System/370 serisine (1970'ler–1980'ler) eklendi ve bazı S/360'larda mevcuttu 1960'lardaki modeller (S/360-85, -195 ve diğerleri özel istek üzerine veya işletim sistemi yazılımı tarafından simüle edildi).

VAX işlemcisi, "H Kayan nokta" biçimi olarak kayan nokta olmayan IEEE dörtlü-hassas uygulamaya. Bir işaret biti, 15 bitlik bir üs ve 112 kesir biti vardı, ancak bellekteki düzen, IEEE dörtlü kesinlikten önemli ölçüde farklıydı ve üs sapması da farklıydı. En eski VAX işlemcilerinden yalnızca birkaçı donanımda H Kayan nokta talimatları uyguladı, diğerleri yazılımda H Kayan noktayı taklit etti.

RISC V mimarisi kayar nokta aritmetik IEEE 754-2008 ikili 128 bit için bir "S" (dört hassas) uzantısını belirtir. "L" uzantısı (henüz onaylanmamıştır) 64-bit ve 128-bit ondalık kayan nokta belirtecektir.

Dört hassasiyetli (128 bit) donanım uygulaması, SIMD talimatlarını uygulayan "128 bit FPU'lar" ile karıştırılmamalıdır , örneğin Akışlı SIMD Uzantıları veya AltiVec gibi , dört adet 32 ​​bitlik tek kesinliğin 128 bit vektörlerine atıfta bulunur veya aynı anda çalıştırılan iki 64-bit çift kesinlik değeri.

Ayrıca bakınız

Referanslar

Dış bağlantılar