Kayan nokta sayısı: nedir? Örneklerle açıklamak
Bu pratik ipucunda, kayan nokta sayısının ne olduğunu ve sabit nokta numarasından nasıl farklı olduğunu gösteririz.
Kayan nokta sayısı: nedir?
Bilgisayar biliminde, kayan nokta sayısı genellikle belirli bir doğrulukla çalışması gereken ölçüm cihazlarında kullanılır.
- Kayan nokta sayısı (veya "kayan nokta sayısı"), bir sayının üstel gösterimi kullanarak temsilidir. İstisnai durumlarda, bu sadece yaklaşık olarak çalışır. Ayrıca 1230000 sayısını 1.23 ⋅ 10⁶ ile temsil edebilirsiniz.
- 1.23'e "Mantissa" denir. 10, "taban" ve 6, "üs" dür. Bu arada, mantis için bir işaret de eklenebilir. Ancak, her şeyi ikili sisteme de uygulayabilirsiniz. Ayrıca 1.0101100 ⋅ 2⁷ numaralı 10101100 sayısını da temsil edebilirsiniz. Bilgisayar sadece işareti, mantis ve üssü saklar.
- Bilgisayarlar genellikle virgülün önünde yalnızca 1 tane olana kadar virgülleri ileri geri hareket ettirir. O zaman PC sadece mantis ve üssün ondalık yerlerini kurtarmak zorundadır.
- Böylece üs pozitif bir sayı olarak kaydedilebilir, önyargı adı verilen sabit bir sayı eklenir. Ondalık basamaktan (- bias) önceki yerin mümkün olan en küçük üssü 0 olarak kaydedilir.
- Sabit nokta numarasının aksine, virgül kayan nokta numarasında sabit bir noktada değildir.
Half, Float & Double - Kayan nokta sayılarının ortak kodlaması
Özellikle Arduino ile programlama yaparken bu üç terime kesinlikle rastladınız. Bunlar standart temsillerdir.
- "Yarım" veri türü 16 bitlik bir sayıdır. En soldaki bit işaretten sorumludur. Üs 5 bit ve mantis 10'a sahiptir. Kullanılan sapma 15'tir. Mantisinin ilk biti (neredeyse) her zaman 1 olduğundan, bu kaydedilmez.
- "Float" (veya "single") veri türü 32 bitlik bir sayıdır. Burada da işaret için biraz kullanılır. Ancak üs 8 bite (sapma = 127) ve mantis 23'e sahiptir.
- "Double" veri türü de işaret için biraz kullanır. Ancak burada üs 11 bite (sapma = 1023) ve mantis bile 52 bite sahiptir. Toplamda, bu 64 bittir, yani 8 bayttır.
- Bu üç yaygın veri türüne ek olarak, çok daha fazlası var. Bununla birlikte, bunlar çoğunlukla kullanılmaz, çünkü yarım, şamandıra ve çiftin doğruluğu zaten yeterince iyidir.
Ondalık sayıları kayan nokta sayılarına dönüştürme - nasıl çalışır
Son olarak, normal ondalık bir sayıyı kayan nokta numarasına nasıl dönüştürebileceğinizi göstermek istiyoruz.
- Bu örnekte 18.4 ondalık sayısını kullanıyoruz. Ondalık noktasından önceki sayı ilk olarak ikili sisteme aktarılır. Sonuç olarak, (10010) ₂ almalısınız.
- Sonra 0.4 dönüştürmek zorunda. İlk önce 0, 4'ü 2 ile çarpın. Sonuç olarak 0, 8 elde edersiniz. Virgülden önceki sayıyı not edin. Bu durumda 0 olur. Sonra 0, 8'i 2 ile çarpın. Bu sefer sonuç olarak 1, 6 elde edersiniz. 1'i not edin ve 0.6 ile hesaplamaya devam edin. Bir süre sonra desenin kendini tekrarladığını göreceksiniz (bu örnekte). Son olarak, yukarıdan aşağıya tüm sayıları yazın: 011001100110 ...
- Ardından sayıları birlikte ekleyin: Ayrıca (⋅ 2⁰) ekleyin, böylece 10010.01100110 ... ⋅ 2⁰ elde edersiniz. Ardından virgül ondalık noktasının önünde yalnızca 1 tane olana kadar hareket ettirin ve gücü uygun şekilde değiştirin. Sonuç olarak, ondalık noktasını 4 basamak sola kaydırdığınız için 1.001001100110 ... ⋅ 2⁴ almalısınız. Bu adıma "normalleştirme" de denir.
- Bu örnekte "float" veri türünü kullanıyoruz. Bu nedenle üssünüze uygun yanlılık değerini ekleyin. Ayrıca 4 + 127 = 131 hesaplamasının sonucunu ikili sayıya dönüştürmelisiniz. 131 sayısı, ikili sistemdeki 10000011 sayısıdır.
- Artık bitmiş kayan nokta numarasını yazabilirsiniz. Önce işaretin bitini yazın. Pozitif bir sayı olduğu için ilk bit 0'dır. Sonra 131 yazmanız gerekir. Her şey bu durumda mükemmel uyuyor, çünkü bu sayı 8 bit gerektiriyor ve bir şamandıra için 8 bit mevcut. Son olarak, mantisin ilk 23 bitini yazmalısınız, çünkü mantis bir şamandıra için 23 bite sahiptir.
- Bu nedenle, bitmiş kayan nokta numaranız 01000001100100110011001100110011 numarası olmalıdır. Biraz daha net olan 0 | 10000011 | 00100110011001100110011 sayısıdır.
Kayan nokta sayısını ondalık sayıya dönüştürme - İşte nasıl
Son olarak, kayan nokta sayısını tekrar ondalık sayıya nasıl dönüştürebileceğinizi göstermek istiyoruz. Bunun için 1000001100100110011001100110011 numarasını alıyoruz.
- Önce 16, 32 veya 64 bit sayı elde edene kadar sayıyı (ön) sıfırlarla doldurun. Bu durumda 01000001100100110011001100110011'dir.
- İlk hane işaret anlamına gelir. Yani sayımız pozitif.
- Sonra sonraki (bu durumda) 8 haneyi yazın ve önyargıyı çıkarın. (10000011) ₂ = 131 → 131 - 127 = 4 → Yani arkada "⋅ 2⁴" var.
- Şimdi bir "1" yazıp kalan tüm sayıların yanı sıra "⋅ 2⁴" yazın: 1.00100110011001100110011 ⋅ 2⋅
- Ardından "⋅ 2⁴" yi atlayabilmeniz için virgül 4 yeri sağa hareket ettirin: 10010.0110011001100110011
- Ardından, 10010'u her zamanki gibi bir tam sayıya dönüştürün. 18 yaşındasın.
- Şimdi ondalık basamakları dönüştürmelisiniz. Virgülden sonraki ilk hane 1: 2¹, ikinci hane 1: 2² ve benzerlerine sahiptir. Değerleri ve virgülden önceki sayıyı size 18.3999996185302734375 numarasını verin.
Bir sonraki pratik ipucunda, ASCII harflerini ikili sayılara nasıl dönüştürebileceğinizi göstereceğiz.