Verse wykorzystuje wartość float jako typ do przechowywania i obsługi liczb zmiennoprzecinkowych, takich jak 1.0, -50.5 i 3.14159.
Wartość zmiennoprzecinkowa (float) w języku Verse to 64-bitowa liczba zmiennoprzecinkowa IEEE, co oznacza, że może zawierać liczbę dodatnią lub ujemną, która ma separator dziesiętny w zakresie [-2^1024 + 1, … , 0, … , 2^1024 - 1] lub wartość NaN (nieliczbową).
Implementacja dla wartości zmiennoprzecinkowej (float) różni się od standardu IEEE w następujący sposób:
- Jest tylko jedna wartość
NaN. - Wartość
NaNjest równa samej sobie. - Każda liczba jest równa samej sobie. Jeśli dwie liczby są równe, to żaden czysty kod Verse nie może zaobserwować różnicy między nimi.
0nie może być ujemne.
Wstępnie zdefiniowane wartości zmiennoprzecinkowe (float) można uwzględnić w kodzie jako literały float. Literał float to liczba zmiennoprzecinkowa w kodzie.
Poniżej zaprezentowano przykład utworzenia zmiennej float o nazwie MaxHealth, inicjowanej za pomocą literału float 100.0:
MaxHealth : float = 100.0
Operacje z użyciem typu float
Wartości zmiennoprzecinkowe obsługują operacje matematyczne i porównania z innymi wartościami zmiennoprzecinkowymi.
Operacje matematyczne
W Verse można wykonać cztery podstawowe operacje matematyczne z wykorzystaniem wartości zmiennoprzecinkowych (float): + do dodawania, - do odejmowania, * do mnożenia i / do dzielenia.
Istnieją również połączone operatory do wykonywania podstawowych operacji matematycznych (dodawanie, odejmowanie, mnożenie i dzielenie) oraz aktualizowania wartości wskaźnika, do której nastąpiło odwołanie. Takie połączone operatory działają tak samo, jak przypisanie wyniku do pierwszego operandu operacji matematycznej.
Na przykład poniższy kod natychmiast dzieli wartość CurrentHealth na pół:
# Zacznij od początkowej wartości zdrowia
var CurrentHealth : float = 75.0
# Zmniejsz ją o połowę
set CurrentHealth *= 0.5
# CurrentHealth wynosi teraz 37.5.
Liczby zmiennoprzecinkowe ze znakiem
Liczba zmiennoprzecinkowa ze znakiem może przyjmować wartość dodatnią, ujemną lub zerową. Za pomocą operatora - można utworzyć ujemną liczbę zmiennoprzecinkową. W tym celu trzeba wstawić operator - przed liczbą zmiennoprzecinkową, np. -3.2.
Wstawianie przed liczbą zmiennoprzecinkową operatora + pozwala wizualnie uporządkować kod, jednak nie powoduje zmiany wartości liczby zmiennoprzecinkowej.
W poniższym kodzie atak typu "life drain" leczy atakującego, przywracając mu jedną ósmą obrażeń zadanych przeciwnikowi.
# Ustaw parametry opisujące sytuację
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
# Zwiększ aktualny poziom zdrowia w oparciu o zadane obrażenia.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# CurrentAttackerHealth wynosi teraz 100.25.
Porównanie
Za pomocą zawodnego operatora = można przetestować, czy dwie liczby zmiennoprzecinkowe są równe, natomiast zawodny operator <> pozwala stwierdzić brak równości.
Liczby są uporządkowane, więc za pomocą zawodnego operatora < można sprawdzić, czy jedna liczba zmiennoprzecinkowa jest mniejsza od innej liczby zmiennoprzecinkowej, a zawodny operator > pozwala sprawdzić, czy jedna liczba zmiennoprzecinkowa jest większa od innej liczby zmiennoprzecinkowej.
Za pomocą zawodnego operatora <= można sprawdzić, czy jedna liczba zmiennoprzecinkowa jest równa innej liczbie zmiennoprzecinkowej lub mniejsza, a zawodny operator >= pozwala sprawdzić, czy jedna liczba zmiennoprzecinkowa jest równa innej liczbie zmiennoprzecinkowej lub większa.
Wartość NaN' jest porównywalna z innymi wartościami zmiennoprzecinkowymi, a NaN` jest większa niż wszystkie inne wartości zmiennoprzecinkowe i równa samej sobie.
# Ustaw parametry opisujące sytuację
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
MaxAttackerHealth : float = 100.0
# Zwiększ aktualny poziom zdrowia w oparciu o zadane obrażenia.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# Upewnij się, że atakujący nie przekracza maksymalnego poziomu zdrowia
if (CurrentAttackerHealth > MaxAttackerHealth):
# Za wysoki poziom! Zmniejsz do maksymalnej wartości.
set CurrentAttackerHealth = MaxAttackerHealth
# CurrentAttackerHealth wynosi teraz 100.0.
Biblioteka standardowa
Biblioteka standardowa zawiera funkcje, które ułatwiają tworzenie i stosowanie wartości zmiennopozycyjnych oraz często spotykanych konstrukcji i funkcji matematycznych. Więcej szczegółów na temat tych funkcji zawiera sekcja Odwołania do interfejsu API Verse.
Typ możliwy do persystencji
Wartości zmiennopozycyjne mogą być persystentne, co oznacza, że możesz ich użyć w zmiennych weak_map o zasięgu modułowym i zachować ich wartości podczas sesji gry. Więcej informacji na temat persystencji w Verse znajdziesz w artykule Używanie persystentnych danych w Verse.