Verse, 1.0, -50.5 ve 3.14159 gibi kayan noktalı sayıları depolamak ve işlemek için tür olarak floatu kullanır.
Verse’te kayan sayı bir IEEE 64-bit kayan olup bunun anlamı, kayanın, [-2^1024 + 1, … , 0, … , 2^1024 - 1] aralığında bir ondalık noktası olan pozitif veya negatif bir sayı içerebilecek olması veya NaN [Not a Number (Sayı Değil)] değerine sahip olmasıdır.
Kayan değere yönelik uygulama, IEEE standardından aşağıdaki unsurlar bakımından farklılık gösterir:
- Yalnızca bir
NaNdeğeri vardır. NaNkendisine eşittir.- Her sayı kendisine eşittir. İki sayı eşitse, bu durumda hiçbir saf Verse kodu aralarındaki farkı göremez.
0negatif olamaz.
Önceden tanımlanmış kayan değerleri koduna kayan değişmez değerler olarak dahil edebilirsin. Kayan değişmez değeri, kodundaki bir kayan noktalı sayıdır.
Aşağıda, 100.0 kayan değişmez değeriyle başlatılan MaxHealth adında bir kayan değişkenin nasıl oluşturulacağına dair bir örnek verilmiştir:
MaxHealth : float = 100.0
Kayan Sayı İşlemleri
Kayan sayılar, matematik işlemlerini ve diğer kayanlarla karşılaştırmaları destekler.
Matematik
Verse’teki kayanlarla dört temel matematik işlemini yapabilirsin: toplama için +, çıkarma için -, çarpma için *, bölme içinse /.
Temel matematik işlemlerinin (toplama, çıkarma, çarpma ve bölme) yapılmasına ve bir işaretçinin başvurulan değerinin güncellenmesine yönelik birleşik işleçler de vardır. Bu birleşik işleçler, sonucu matematik işleminin ilk işlenenine atamakla aynıdır.
Örneğin, aşağıdaki kod CurrentHealth değerini anında yarıya indirir:
# Orijinal can değeriyle başla
var CurrentHealth : float = 75.0
# Bunu yarıya indir
set CurrentHealth *= 0.5
# CurrentHealth şimdi 37,5’tir.
İşaretli Kayan Noktalı Sayılar
İşaretli bir kayan sayı; pozitif, negatif veya sıfır olabilen bir değerdir. - işleci, kayandan önce geliyorsa kayanı negatif hale getirmek için - işleci kullanılabilir. Örneğin: -3.2.
Ayrıca, kodunun görsel olarak uyumlu hale gelmesine yardımcı olması için bir kayandan önce + işlecini de kullanabilirsin, ancak bu işleç kayanın değerini değiştirmeyecektir.
Aşağıdaki kodda, bir "can tüketme" saldırısı, saldırganı hedefe verilen hasarın sekizde biri kadar iyileştirmektedir.
# Durumu açıklayan parametreleri ayarla
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
# Verilen hasara göre mevcut canı arttır.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# CurrentAttackerHealth şimdi 100,25’tir.
Karşılaştırma
İki kayan değerin eşit olup olmadığını test etmek için = başarısız olabilir işlecini, eşitsizliği test etmek içinse <> başarısız olabilir işlecini kullanabilirsin.
Sayılar sıralı olduğundan bir kayanın diğer bir kayandan küçük olup olmadığını test etmek için < başarısız olabilir işlecini, bir kayanın diğer bir kayandan büyük olup olmadığını test etmek içinse > başarısız olabilir işlecini kullanabilirsin.
Bir kayanın diğer bir kayandan küçük veya ona eşit olup olmadığını test etmek için <= başarısız olabilir işlecini, bir kayanın diğer bir kayandan büyük veya ona eşit olup olmadığını test etmek içinse >= başarısız olabilir işlecini kullanabilirsin.
NaN, diğer kayanlar gibi karşılaştırılabilir olup diğer tüm kayanlardan daha büyüktür ve kendisine eşittir.
# Durumu açıklayan parametreleri ayarla
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
MaxAttackerHealth : float = 100.0
# Verilen hasara göre mevcut canı arttır.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# Saldırganın maksimum canının üzerinde iyileşmediğinden emin ol
if (CurrentAttackerHealth > MaxAttackerHealth):
# Çok yüksek! Maksimum değere düşür.
set CurrentAttackerHealth = MaxAttackerHealth
# CurrentAttackerHealth şimdi 100,0’dır.
Standart Kütüphane
Standart kütüphane, kayan sayıların oluşturulması ve kullanımına yardımcı olacak fonksiyonlar ile yaygın matematik yapıları ve fonksiyonları sağlar. Bu fonksiyonlarla ilgili daha detaylı bilgi için Verse API Referansı bölümüne bakabilirsin.
Kalıcı Tür
Kayan noktalı değerler kalıcıdır, yani bu değerleri hem modül kapsamına alınmış weak_map değişkenleriyle kullanabilir hem de değerlerini farklı oyun oturumları arasında devam ettirebilirsin. Verse’te kalıcılık hakkında daha ayrıntılı bilgi için Verse’te Kalıcı Veri Kullanımı bölümüne bakabilirsin.