Verse utiliza float como tipo para almacenar y controlar números de float, como 1.0, -50.5, y 3.14159.
Un float en Verse es un IEEE 64-bit float, lo que significa que puede contener un número positivo o negativo que tiene un punto decimal en el rango [-2^1024 + 1, … , 0, … , 2^1024 - 1], o tiene el valor NaN (no es un número).
La implementación para float difiere de la norma IEEE en los siguientes aspectos:
- Solo hay un valor
NaN. NaNes igual a sí mismo.- Cada número es igual a sí mismo. Si dos números son iguales, entonces ningún código de Verse puro puede observar la diferencia entre ellos.
0no puede ser negativo.
Puedes incluir valores float predefinidos dentro de tu código como float literales. Un float literal es un número float en tu código.
El siguiente es un ejemplo de cómo crear un float variable llamado MaxHealth, inicializado con el float literal 100.0:
MaxHealth : float = 100.0
Operaciones de float
Los float admiten operaciones matemáticas y comparaciones con otros float.
Matemáticas
Puedes hacer las cuatro [operaciones matemáticas] (verse-glossary#math-expression) básicas con puntos flotantes en Verse: + para sumar, - para restar, * para multiplicar y / para dividir.
También hay operadores combinados para realizar las operaciones matemáticas básicas (suma, resta, multiplicación y división), y para actualizar el valor desreferenciado de un puntero. Estos operadores combinados son lo mismo que asignar el resultado al primer operando de la operación matemática.
Por ejemplo, el siguiente código reduce instantáneamente a la mitad el valor de CurrentHealth:
# Iniciar con el valor de vida original
var CurrentHealth : float = 75.0
# Reducirlo a la mitad
set CurrentHealth *= 0.5
# CurrentHealth ahora es 37.5.
Números de float con signo
Un punto flotante con signo es un valor que puede ser positivo, negativo o cero. El operador - se puede utilizar para negar un float si - aparece antes del float, por ejemplo -3.2.
También puedes usar el operador + antes de un float para ayudar a alinear tu código visualmente, pero no cambiará el valor del float.
En el siguiente código, un ataque de "drenaje de vida" cura al atacante por un octavo del daño infligido al objetivo.
# Configura los parámetros que describen la situación
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
# Aumentar la vida actual en función del daño infligido.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# CurrentAttackerHealth ahora es 100,25.
Comparación
Puedes usar el operador falible = para probar si dos float son iguales, y el operador falible <> para probar la desigualdad.
Dado que los números están ordenados, se puede utilizar el operador falible < para comprobar si un float es menor que otro float, y el operador falible > para comprobar si un float es mayor que otro float.
Puedes utilizar el operador falible <= para comprobar si un punto flotante es menor o igual a otro punto flotante, y el operador falible >= para comprobar si un punto flotante es mayor o igual a otro punto flotante.
NaN es comparable como otros float, y NaN es mayor que todos los demás float e igual a sí mismo.
# Configura los parámetros que describen la situación
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
MaxAttackerHealth : float = 100.0
# Aumentar la vida actual en función del daño infligido.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# Asegúrate de que el atacante no se cure más allá de su vida máxima
if (CurrentAttackerHealth > MaxAttackerHealth):
# ¡Demasiado alta! Reduce al valor máximo.
set CurrentAttackerHealth = MaxAttackerHealth
# CurrentAttackerHealth ahora es 100,0.
Biblioteca estándar
La biblioteca estándar brinda funciones para ayudar a crear y utilizar enteros y estructuras y funciones matemáticas comunes. Consulta la referencia de la API de Verse para obtener más detalles sobre estas funciones.
Tipo persistente
Los valores de punto float son persistentes. Esto quiere decir que los puedes usar en tus variables weak_map del módulo y hacer que sus valores persistan a lo largo de las sesiones de juego. Para obtener más información sobre la persistencia en Verse, consulta Cómo usar datos persistentes en Verse.