Verse utilise float comme type pour stocker et manipuler les nombres à point décimal flottant, comme 1.0, -50.5, et 3.14159.
Un float dans Verse est un [float IEEE 64 bits] (https://en.wikipedia.org/wiki/Double-precision_floating-point_format), ce qui signifie qu'il peut contenir un nombre positif ou négatif avec un point décimal dans la plage [-2^1024 + 1, ... , 0, ... , 2^1024 - 1], ou a la valeur NaN (Not a Number).
L'implémentation de float diffère de la [norme IEEE] (https://standards.ieee.org/ieee/754/4211/) pour les raisons suivantes :
- Il n'existe qu'une seule valeur
NaN. NaNest égal à lui-même.- Chaque nombre est égal à lui-même. Si deux nombres sont égaux, alors aucun code Verse pur ne peut observer la différence entre eux.
0ne peut pas être négatif.
Vous pouvez inclure des valeurs float prédéfinies dans votre code en tant que littéraux float. Un littéral float est un nombre à point décimal dans votre code.
Voici un exemple de création d'une variable float nommée MaxHealth, initialisée avec le littéral float 100.0 :
MaxHealth : float = 100.0
Opérations de floats
Les floats acceptent les opérations et les comparaisons mathématiques avec d'autres floats.
Mathématique
Vous pouvez effectuer les quatre opérations mathématiques élémentaires avec des floats dans Verse : + pour l'addition, - pour la soustraction, * pour la multiplication, et / pour la division.
Il existe également des opérateurs combinés pour effectuer les opérations mathématiques de base (addition, soustraction, multiplication et division) et mettre à jour la valeur déréférencée d'un pointeur. Ces opérateurs combinés reviennent à affecter le résultat au premier opérande de l'opération mathématique.
Par exemple, le code suivant divise instantanément par deux la valeur de CurrentHealth :
# Commencer par la valeur de PV d'origine
var CurrentHealth : float = 75.0
# La réduire de moitié
set CurrentHealth *= 0.5
# La santé actuelle est maintenant de 37,5.
Nombres à point flottant signés
Un opérateur float signé est une valeur qui peut être positive, négative ou nulle. L'opérateur - peut être utilisé pour inverser le signe d'un float si - apparaît devant le float, par exemple -3.2.
Vous pouvez également utiliser l'opérateur + devant un float pour aider à aligner votre code visuellement, mais il ne changera pas la valeur du float.
Dans le code suivant, une attaque « absorption de PV » attribue à l'attaquant un huitième des dommages infligés à la cible.
# Configurer les paramètres qui décrivent la situation
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
# Augmenter la santé actuelle en fonction des dommages infligés.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# CurrentAttackerHealth est maintenant de 100.25.
Comparaison
Vous pouvez utiliser l'opérateur faillible = pour tester si deux floats sont égaux, et l'opérateur faillible <> pour tester l'inégalité.
Puisque les nombres sont ordonnés, vous pouvez utiliser l'opérateur faillible < pour tester si un float est inférieur à un autre float, et l'opérateur faillible > pour tester si un float est supérieur à un autre float.
Vous pouvez utiliser l'opérateur faillible <= pour tester si un float est inférieur ou égal à un autre float, et l'opérateur faillible >= pour tester si un float est supérieur ou égal à un autre float.
NaN est comparable aux autres floats, et NaN est plus grand que tous les autres floats et égal à lui-même.
# Configurer les paramètres qui décrivent la situation
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
MaxAttackerHealth : float = 100.0
# Augmenter la santé actuelle en fonction des dommages infligés.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# S'assurer que les PV de l'attaquant ne dépassent pas ses PV max.
if (CurrentAttackerHealth > MaxAttackerHealth):
# Trop élevé ! Réduire à la valeur maximale.
set CurrentAttackerHealth = MaxAttackerHealth
# CurrentAttackerHealth est maintenant de 100.0.
Bibliothèque standard
La bibliothèque standard fournit des fonctions qui aident à créer et à utiliser des valeurs float, ainsi que des structures et fonctions mathématiques courantes. Consultez la référence à l'API Verse pour plus d'informations sur ces fonctions.
Type persistant
Les valeurs à virgule flottante sont persistantes, ce qui signifie que vous pouvez les utiliser dans vos variables weak_map sur l'étendue du module et faire persister leurs valeurs d'une session de jeu à une autre. Pour en savoir plus sur la persistance dans Verse, consultez la rubrique Utiliser des données persistantes dans Verse.