Aracılığıyla paylaş


IEEE Kayan Noktası Temsili

Microsoft C++ (MSVC), IEEE sayısal standartlarıyla tutarlıdır. IEEE-754 standardı, donanımdaki gerçek sayıları temsil etmenin bir yolu olan kayan nokta biçimlerini açıklar. MSVC derleyicisi tarafından hedeflenen donanımda temsil edilebilen kayan noktalı sayılar için en az beş iç biçim vardır. Derleyici bunlardan yalnızca ikisini kullanır. MSVC'de tek duyarlıklı (4 bayt) ve çift duyarlıklı (8 bayt) biçimler kullanılır. Tek duyarlık anahtar sözcüğü floatkullanılarak bildirilir. Çift duyarlık anahtar sözcüğü doublekullanılarak bildirilir. IEEE standardı ayrıca yarım duyarlık (2 bayt) ve dörtlü duyarlık (16 bayt) biçimlerini ve bazı C ve C++ derleyicilerinin veri türü olarak long double uyguladığı çift genişletilmiş duyarlık (10 bayt) biçimini belirtir. MSVC derleyicisinde veri long double türü ayrı bir tür olarak değerlendirilir, ancak depolama türü ile doubleeşler. Ancak, donanım tarafından desteklenen çift genişletilmiş duyarlık biçimi de dahil olmak üzere diğer biçimleri kullanan hesaplamalar için iç ve derleme dili desteği vardır.

Değerler aşağıdaki gibi depolanır:

Değer Farklı depolanır
tek duyarlıklı sign bit, 8 bit üs, 23 bit significand
çift duyarlık sign bit, 11 bit üs, 52 bit significand

Tek duyarlıklı ve çift duyarlıklı biçimlerde, kesirli bölümde önde 1 olduğu varsayılır. Kesirli bölüme işaret adı verilir (bazen mantis olarak da bilinir). Bu baştaki 1 bellekte depolanmaz, bu nedenle bir bit daha az depolansa bile, işaret sertifikaları aslında 24 veya 53 bittir. Çift genişletilmiş duyarlık biçimi aslında bu biti depolar.

Üsler, olası değerlerinin yarısı tarafından taraflıdır. Bu, gerçek üssü elde etmek için bu yanlılığı depolanan üsten çıkardığınız anlamına gelir. Depolanan üs sapmadan küçükse, aslında negatif bir üstür.

Üsler aşağıdaki gibi taraflıdır:

Üs Yanlılık
8 bit (tek duyarlıklı) 127
11 bit (çift duyarlıklı) 1023

Bu üsler on üssün gücü değildir; onlar iki güç. Yani, 8 bit depolanmış üsler -127 ile 127 arasında değişebilir ve 0 ile 254 arasında depolanabilir. 2127 değeri kabaca tek duyarlıklı gerçek sınır olan 1038'e eşdeğerdir.

significand, 1.XXX formun ikili kesri olarak depolanır... . Bu kesir 1'den büyük veya buna eşit ve 2'den küçük bir değere sahiptir. Gerçek sayılar her zaman normalleştirilmiş biçimde depolanır. Başka bir ifadeyle, işaret işaretinin yüksek sıralı biti her zaman 1 olacak şekilde sola kaydırılır. Bu bit her zaman 1 olduğundan, tek duyarlıklı ve çift duyarlıklı biçimlerde varsayılır (depolanmaz). İkili (ondalık değil) noktasının baştaki 1'in hemen sağındaki olduğu varsayılır.

Kayan nokta gösteriminin biçimi aşağıdaki gibidir:

Biçimlendir bayt 1 bayt 2 bayt 3 bayt 4 ... bayt n
tek duyarlıklı SXXXXXXX XMMMMMMM MMMMMMMM MMMMMMMM
çift duyarlık SXXXXXXX XXXXMMMM MMMMMMMM MMMMMMMM ... MMMMMMMM

S işaret bitini temsil eder, X'ler taraflı üs bitleri, M'ler ise işaretlenen bitlerdir. En soldaki bit, tek duyarlıklı ve çift duyarlıklı biçimlerde varsayılır.

İkili noktayı düzgün bir şekilde kaydırmak için önce üssün sapmasını kaldırın ve ardından ikili noktayı sağa veya uygun sayıda bit sola taşıyın.

Özel değerler

Kayan nokta biçimleri özel olarak ele alınan bazı değerleri içerir.

Sıfır

Sıfır normalleştirilemez, bu da onu tek duyarlıklı veya çift duyarlıklı bir değerin normalleştirilmiş biçiminde temsil edilemez hale getirir. Tüm sıfırların özel bit deseni 0'i temsil eder. İşaret biti kümesiyle -0 değerini sıfır olarak göstermek de mümkündür, ancak -0 ve 0 her zaman eşit olarak karşılaştırır.

Sonsuzluklar

+∞ ve −∞ değerleri, tüm değerlerin bir üssü ve sıfırların tümü olan bir işaret işaretiyle temsil edilir. Pozitif ve negatif, işaret biti kullanılarak temsil edilir.

Altnormaller

Normalleştirilmiş biçimdeki en küçük sayıdan daha küçük büyüklükteki sayıları göstermek mümkündür. Bunlara normal olmayan veya normal olmayan sayılar denir. Üs sıfırların tümüyse ve işaret sıfır değilse, işaret işaretinin örtük baştaki biti bir değil sıfır olarak kabul edilir. Normal olmayan sayıların duyarlığı, işaretteki baştaki sıfırların sayısı arttıkça düşer.

NaN - Sayı Değil

IEEE kayan nokta biçiminde 0 / 0 gibi gerçek sayı olmayan değerleri temsil etmek mümkündür. Bu tür bir değer NaN olarak adlandırılır. NaN, tümünün bir üssü ve sıfır olmayan bir işaretle temsil edilir. İki tür NaN vardır, sessiz NaN'ler veya QNaN'lar ve Sinyal NaN'leri veya AD'ler. Sessiz AD'ler, işaret işaretinde önde gelen adlara sahiptir ve bir ifade aracılığıyla yayılır. Sonsuza bölme veya sonsuzu sıfırla çarpma gibi belirsiz bir değeri temsil eder. Sinyal NaN'lerinin işaret işaretinde önünde sıfır vardır. Bunlar, kayan nokta donanım özel durumunun sinyallerini vermek için geçerli olmayan işlemler için kullanılır.

Örnekler

Aşağıda tek duyarlıklı biçimdeki bazı örnekler verilmiştir:

  • 2 değeri için işaret biti sıfırdır. Depolanan üs 128 veya ikili olarak 1000 0000'dir ve bu da 127 artı 1'dir. Depolanan ikili işaret işareti (1.) 000 0000 0000 0000 0000 0000 0000 0000'dir ve bu nedenle gerçek işaret işareti birdir.

    Değer Formül İkili gösterim Onaltılık
    2 1 * 21 0100 0000 0000 0000 0000 0000 0000 0000 0x40000000
  • -2 değeri. +2 ile aynı, ancak işaret biti ayarlanmıştır. Aynı şey, tüm IEEE biçimindeki kayan noktalı sayıların negatifi için de geçerlidir.

    Değer Formül İkili gösterim Onaltılık
    -2 -1 * 21 1100 0000 0000 0000 0000 0000 0000 0000 0xC0000000
  • 4 değeri. Aynı işaret, üs bir artar (sapmalı değer ikilide 129 veya 100 0000 1'dir.

    Değer Formül İkili gösterim Onaltılık
    4 1 * 22 0100 0000 1000 0000 0000 0000 0000 0000 0x40800000
  • 6 değeri. Aynı üs, işaret işareti yarı yarıya büyüktür. Bu (1.) 100 0000 ... 0000 0000; ikili kesir olduğundan, kesirli basamakların değerleri 1/2, 1/4, 1/8 vb. olduğundan 1 1/2'dir.

    Değer Formül İkili gösterim Onaltılık
    6 1,5 * 22 0100 0000 1100 0000 0000 0000 0000 0000 0x40C00000
  • 1 değeri. İkinin diğer güçleri ile aynı işaret, yanlı üs 127'de ikiden az veya ikili olarak 011 1111 1'dir.

    Değer Formül İkili gösterim Onaltılık
    1 1 * 20 0011 1111 1000 0000 0000 0000 0000 0000 0x3F800000
  • 0,75 değeri. Yanlı üs ikili olarak 126, 011 1111 0 ve işaret işareti (1.) 100 0000 ... 0000 0000, yani 1/2.

    Değer Formül İkili gösterim Onaltılık
    0,75 1,5 * 2-1 0011 1111 0100 0000 0000 0000 0000 0000 0x3F400000
  • 2,5 değeri. 1/4'leri temsil eden bitin işaret işaretinde ayarlanması dışında iki ile tam olarak aynıdır.

    Değer Formül İkili gösterim Onaltılık
    2.5 1,25 * 21 0100 0000 0010 0000 0000 0000 0000 0000 0x40200000
  • 1/10, ikili olarak yinelenen bir kesirdir. İşaret 1,6'dan biraz azdır ve yanlı üs 1,6'nın 16'ya bölünmesi gerektiğini söyler. (İkili olarak 011 1101 1'dir ve ondalık olarak 123'tür.) Gerçek üs 123 - 127 = -4'dür; bu da çarpılan faktörün 2-4 = 1/16 olduğu anlamına gelir. Depolanmış işaret, son bitte, tanınmayan sayıyı mümkün olduğunca doğru bir şekilde temsil etme girişiminde yukarı yuvarlandı. (1/10 ve 1/100'lerinin ikili olarak tam olarak temsil edilememelerinin nedeni, 1/3 değerinin ondalık olarak tam olarak temsil edilememe nedenine benzer.)

    Değer Formül İkili gösterim Onaltılık
    0,1 1.6 * 2-4 0011 1101 1100 1100 1100 1100 1100 1101 0x3DCCCCCD
  • Sıfır özel bir durumdur. Tüm sıfırlar olan, mümkün olan en düşük temsil edilebilir pozitif değer için formülü kullanır.

    Değer Formül İkili gösterim Onaltılık
    0 1 * 2-128 0000 0000 0000 0000 0000 0000 0000 0000 0x00000000

Ayrıca bkz.

Kayan Noktalı Sayıların Neden Duyarlık Kaybedebileceği