Kayan nokta formatı gezgini: IEEE 754, bfloat16, FP8

Bir sayı ya da bit deseni yazın; IEEE 754, bfloat16 ya da FP8 formatının onu nasıl sakladığını görün: alanlar, tam değer, komşu değerler ve hata.

Sınır
en fazla 64 bit; yalnızca en yakına yuvarlama, eşitlikte çifte
Yayımlandı
Yazarlık
Taslağı yapay zekâ desteğiyle hazırlandı, İsmail tarafından gözden geçirildi

Bu sayfayı İngilizce oku

0.1 ya da 1e-7 gibi bir ondalık sayı, Infinity ya da NaN, ya da bir desen: 0x3dcccccd, 0b1…, 32'h3dcc_cccd.

normal 0.100000001 0x3dcccccd

İşaret
0
Üs
123 0b01111011 2−4
Kesir
5033165 0b10011001100110011001101
Desen
0x3dcccccd 32'h3dcc_cccd
Sınıf
normal
Değer
(−1)0 × 2123 − 127 × (1 + 5033165 / 223)tam olarak 0.1000000014901161193847656259 anlamlı basamağa 0.100000001
Alttaki
0.0999999940395355224609375 0x3dccccccaralık 0.000000007450580596923828125
Üstteki
0.10000000894069671630859375 0x3dcccccearalık 0.000000007450580596923828125
Hata
saklanan − girilen 0.000000001490116119384765625aralığın 0.2 katıgöreli, yaklaşık 1.49e-8
En büyük sonlu
yaklaşık 3.40282347e+38 0x7f7fffff
En küçük normal
yaklaşık 1.17549435e-38 0x00800000
En küçük subnormal
yaklaşık 1.40129846e-45 0x00000001
Duyarlık
p = 24 bit, yaklaşık 7.22 ondalık basamak9 anlamlı basamak aynı değere geri okunur

Yalnızca en yakına yuvarlama, eşitlikte çifte.

Ekran nasıl okunur

Önce bitler gelir: en anlamlısı solda, iki nibble'lık baytlar hâlinde, her nibble'ın altında onaltılık basamağıyla. Bitlerin üstündeki çizgi alanları gösterir: işaret, üs (exponent) ve kesir (fraction; Türkçe kaynaklarda çoğu zaman mantis); ilk ikisinin üstünde düz, kesrin üstünde kesikli. Her bit bir düğmedir. Birine basınca bit değişir ve giriş alanı yazdığınız değer yerine yeni deseni gösterir.

Bitlerin altında, çalışırken görünür kalan bir satır vardır: değerin sınıfı (sıfır, subnormal, normal, sonsuz ya da NaN), değerin her zaman aynı desene geri okunacak kadar anlamlı basamağa yuvarlanmış hâli ve desenin onaltılık yazımı.

Alttaki döküm deseni parçalarına ayırır. Üs alanı, temsil ettiği ikinin kuvvetiyle birlikte gösterilir: normal bir sayıda E − bias, subnormal bir sayıda 1 − bias. Değer üç biçimde verilir: alanların oluşturduğu formül, tam değer ve yuvarlanmış değer. Tam değer uzun olabilir, çünkü her ikili kesir sonludur ama bunun için bin basamak gerekebilir; kırk anlamlı basamağı aşan bir değer katlanır ve basamakların tamamı bir dokunuş uzaktadır.

Alttaki ve üstteki, iki yandaki değerlerdir; desenleri ve her birine olan aralıkla birlikte. İki aralık, en küçük normal sayının üstündeki her ikinin kuvvetinde farklıdır: sıfıra doğru olan aralık, öbür yöndekinin yarısıdır. Ondalık bir sayı yazdıysanız hata satırı, saklanan değerin ondan ne kadar uzak olduğunu söyler: tam olarak, yuvarlamanın aştığı aralığın kesri olarak (en büyük sonlu değerin ötesindeki bir değer doyurulmadıkça yarıyı geçmez) ve yazdığınız değere göre.

Dökümü formatın kendi sınırları kapatır: en büyük sonlu değer, en küçük normal ve subnormal değerler ve duyarlık (precision): p bit, iki biçimde ondalık basamak olarak. Birincisi, p·log102, duyarlığın kendisidir; ikincisi, bir değeri yazıp değişmeden geri okumaya her zaman yeten anlamlı basamak sayısıdır.

Yöntem

Hiçbir değer bir JavaScript sayısından geçmez. Yazdığınız şey bir tam sayı ve on'un bir kuvveti olarak tam okunur ve formata bir kez yuvarlanır: en yakına, eşitlikte çifte. IEEE 754 bunu ikili formatlar için varsayılan yapar (bölüm 4.3.3); OFP8 (bölüm 5.2.1) ve MX (bölüm 5.3.2 ve 5.3.3) her uygulamanın bu modu sunmasını ister, başka modlara da izin verir. Önce binary32'ye ya da double'a yuvarlamak, bir eşitliğin yanında farklı bir sonuç verebilir. E4M3'te 464 + 2−17, binary32'de 464 olur ve ardından 448'e iner; doğrudan yuvarlanınca en büyük değerin ötesine geçer.

Bir değer en büyük sonlu değerin ötesine yuvarlanırsa gezgin, doyurmayan (non-saturating) dönüşümün verdiğini saklar: format sonsuzu ya da NaN'ı tutuyorsa onu. Yanında doyuran (saturating) dönüşümün vereceğini de yazar. İkisi de olmayan bir format doyurur.

Formatlar

binary16, binary32 ve binary64, IEEE 754-2019'un formatlarıdır; genişliklerini ve bias'larını standardın 3.5 numaralı tablosu verir. bfloat16, o dönem Google'ın yapay zekâ araştırma gruplarından biri olan Google Brain'den çıkmıştır: formatın fikri orada doğdu, adını da oradan alır (brain floating point). Kesri yedi bite kısaltılmış binary32'dir; Intel onu yazılım geliştirici kılavuzunun ilk cildinde (bölüm 4.2.3.1) ve BF16 sayısal tanım belgesinde böyle tanımlar. Intel'in dönüşüm komutu ve Google Cloud TPU, binary32'den dönüştürürken subnormal değerleri sıfıra indirir (flush to zero); gezgin bunu yapmaz, çünkü bir makineyi değil formatı gösterir.

TF32, NVIDIA'nındır; A100 mimari belgesinden ve PTX komut kümesinden gelir: bir işaret biti, sekiz üs biti ve on kesir biti, binary32'nin aralığıyla. NVIDIA ne bias'ını ne de sonsuz ve NaN kodlarını yayımlar; PTX de bitlerinin düzenini uygulamaya bırakır. Bu yüzden gezgin on dokuz biti binary32'nin bias'ı ve kuralıyla gösterir. A100'de PTX'in binary32'den TF32'ye sunduğu tek dönüşüm, cvt.rna, eşitliği çifte değil, sıfırdan uzağa yuvarlar.

E4M3 ve E5M2, OCP 8-bit Floating Point Specification'ın 1.1 sürümündeki formatlardır. E4M3'te sonsuz yoktur ve her işaret için bir NaN kodu vardır; bu yüzden en üst üssü 448'e kadar sayı tutar. E5M2 IEEE kuralını izler. Spesifikasyon dönüşümü yalnızca binary32, binary16 ve bfloat16'dan tanımlar ve hem doyuran hem doyurmayan bir mod ister (bölüm 5.2.1); dönüşümün hangi NaN kodunu ve hangi işareti üreteceğini uygulamaya bırakır. Gezgin işareti korur ve E5M2 için kesri 10 olan NaN'ı kullanır.

FP6 E2M3, FP6 E3M2 ve FP4 E2M1, OCP Microscaling Formats spesifikasyonunun 1.0 sürümündeki eleman formatlarından üçüdür (bölüm 5.3.2 ve 5.3.3): her kod sonlu bir sayıdır ve fazla büyük bir değer doyurulur. Spesifikasyon, tutulamayacak kadar küçük bir değerin hangi işaretle sıfıra yuvarlanacağını söylemez ve bir NaN'ın dönüşümünü uygulamaya bırakır: gezgin işareti korur ve NaN'ı reddeder. Bir MX bloğunun paylaştığı ölçek, E8M0, işaretsiz ve kesirsizdir, bu formatlar gibi yazılamaz; gezgin onu dışarıda bırakır.

Sınırlar

Yalnızca en yakına, eşitlikte çifte yuvarlama: yönlü ya da stokastik yuvarlama yok. Ondalık formatlar değil, yalnızca en fazla 64 bitlik ikili formatlar: 2 ile 11 bit arası üs, 1 ile 52 bit arası kesir, 0 ile 2e − 1 arası bias. Gezgin bir formatın ne tuttuğunu gösterir, bir makinenin onunla ne yaptığını değil: subnormal değerleri sıfıra indirmek ve doyuran dönüşüm donanımın seçimleridir. Giriş en fazla 2400 karakterdir; bu, gezginin sakladığı her değerin tam yazımını geri yapıştırmaya yeter.

Bir hata mı buldunuz? Düzeltme gönderin