Verse utilizza float
come tipo per memorizzare e gestire numeri a virgola mobile, come ad esempio 1.0
, -50.5
e 3.14159
.
Un float in Verse è un float IEEE a 64 bit, il che significa che può contenere un numero positivo o negativo che ha un punto decimale nell'intervallo [-2^1024 + 1
, … , 0
, … , 2^1024 - 1
], o ha un valore NaN
(Not a Number).
L'implementazione di float differisce dallo standard IEEE nei modi seguenti:
- È presente un solo valore
NaN
. NaN
è uguale a se stesso.-
- Ogni numero è uguale a se stesso. Se due numeri sono uguali, allora nessun codice Verse puro può osservare la differenza tra loro.
0
non può essere negativo.
È possibile includere valori float predefiniti all'interno del codice come valori letterali float. Un valore letterale float è un numero a virgola mobile nel codice.
Di seguito è riportato un esempio di come creare una variabile float denominata MaxHealth
, inizializzata con il valore letterale float 100.0
:
MaxHealth : float = 100.0
Operazioni float
I float supportano operazioni matematiche e confronti con altri float.
Matematica
Puoi eseguire le quattro operazioni matematiche di base con float in Verse: +
per addizione, -
per sottrazione, *
per moltiplicazione e /
per divisione.
Sono disponibili anche operatori per eseguire le operazioni matematiche di base (addizione, sottrazione, moltiplicazione e divisione) e aggiornare il valore dereferenziato di un puntatore. La combinazione di questi operatori equivale ad assegnare il risultato al primo operando dell'operazione matematica.
Ad esempio, il codice seguente dimezza istantaneamente il valore di CurrentHealth
:
# Inizia con il valore di salute originale
var CurrentHealth : float = 75.0
# Riduce della metà
set CurrentHealth *= 0.5
# CurrentHealth è ora 37.5.
Numeri a virgola mobile con segno
Un float con segno è un valore che può essere positivo, negativo o pari a zero. L'operatore -
può essere utilizzato per negare un float se -
viene visualizzato prima del float, ad esempio -3.2
.
Si può utilizzare anche l'operatore +
prima di un float per allineare visivamente il codice, ma ciò non cambia il valore del float.
Nel codice seguente, un attacco "fuga di vita" guarisce l'attaccante per un ottavo dei danni inflitti al bersaglio.
# Imposta i parametri che descrivono la situazione
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
# Aumenta la salute attuale in base ai danni inflitti.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# CurrentAttackerHealth è ora 100.25.
Confronto
È possibile utilizzare l'operatore fallibile =
per verificare se due float sono uguali e l'operatore fallibile <>
per verificare la disuguaglianza.
Poiché i numeri sono ordinati, è possibile utilizzare l'operatore fallibile <
per verificare se un float è inferiore a un altro float e l'operatore fallibile >
per verificare se un float è maggiore di un altro float.
È possibile utilizzare l'operatore fallibile <=
per verificare se un float è minore o uguale a un altro float e l'operatore fallibile >=
per verificare se un float è maggiore o uguale a un altro float.
NaN
è confrontabile come altri float e NaN
è maggiore di tutti gli altri float e uguale a se stesso.
# Imposta i parametri che descrivono la situazione
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
MaxAttackerHealth : float = 100.0
# Aumenta la salute attuale in base ai danni inflitti.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# Assicura che l'attaccante non guarisca oltre la sua salute massima
if (CurrentAttackerHealth > MaxAttackerHealth):
# Valore troppo alto! Riduce al valore massimo.
set CurrentAttackerHealth = MaxAttackerHealth
# CurrentAttackerHealth è ora 100.0.
Libreria standard
La libreria standard fornisce funzioni che aiutano a creare e utilizzare i float, le strutture e le funzioni matematiche comuni. Per maggiori dettagli su queste funzioni, consulta la guida API di Verse.
Tipo persistente
I valori a virgola mobile sono persistenti, ovvero è possibile utilizzarli nelle variabili weak_map
con ambito modulo e far sì che i loro valori siano mantenuti tra le sessioni di gioco. Per maggiori dettagli sulla persistenza in Verse, consulta Utilizzo dei dati persistenti in Verse.