Verse는 float 를 1.0 , -50.5 , 3.14159 등 부동 소수점 숫자의 저장 및 처리를 위한 타입으로 사용합니다.
Verse의 float는 IEEE 64비트 float입니다. 즉 [ -2^1024 + 1, … , 0, … , 2^1024 - 1 ] 범위 내의 소수점 또는 NaN (Not a Number) 값이 있는 양수 또는 음수를 포함할 수 있습니다.
이러한 float 구현과 IEEE 표준의 차이점은 다음과 같습니다.
NaN값이 하나뿐입니다.NaN은 그 자신과 같습니다.- 모든 숫자는 그 자신과 같습니다. 두 숫자가 동일하면 순수 Verse 코드는 둘 사이의 차이를 관찰할 수 없습니다.
0은 음수가 될 수 없습니다.
사전 정의된 float 값을 float 리터럴로 코드에 포함할 수 있습니다. float 리터럴은 코드의 부동 소수점 숫자입니다.
다음 예시에서는 MaxHealth 라는 float 변수를 만들고 float 리터럴 100.0 으로 초기화합니다.
MaxHealth : float = 100.0
float 연산
float는 수학 연산 및 다른 float와의 비교를 지원합니다.
수학
Verse에서 float를 사용하여 4개의 수학 연산을 수행할 수 있습니다. + 기호는 덧셈, - 기호는 뺄셈, * 기호는 곱셈, / 기호는 나눗셈입니다.
기본 수학 연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 수행하고 포인터의 역참조된 값을 업데이트하기 위한 복합 연산자도 있습니다. 복합 연산자는 결과를 수학 연산의 첫 피연산자에 할당하는 것과 동일합니다.
예를 들어 다음 코드는 CurrentHealth 값을 즉시 반으로 줄입니다.
# 본래의 체력 값으로 시작합니다.
var CurrentHealth : float = 75.0
# 절반으로 줄입니다.
set CurrentHealth *= 0.5
# CurrentHealth가 이제 37.5입니다.
부호 있는 부동 소수점 숫자
부호 있는 float는 양수, 음수, 0이 될 수 있는 값입니다. 연산자 - 는 -3.2 와 같이 float 앞에 들어가서 float를 음수로 만드는 데 사용될 수 있습니다.
연산자 + 를 float 앞에 사용해서 코드를 보기 좋게 정렬할 수는 있지만 이는 해당 float의 값에 영향을 미치지 않습니다.
다음 코드에서 'life drain' 공격은 타깃에게 가해진 피해의 8분의 1만큼 공격자 체력을 회복시킵니다.
# 상황을 설명하는 파라미터를 구성합니다.
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
# 가한 피해를 기반으로 현재 체력을 높입니다.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# CurrentAttackerHealth가 이제 100.25입니다.
비교
실패 가능 연산자 = 를 사용하여 두 float가 동일한지 테스트하고 실패 가능 연산자 <> 를 사용하여 두 float가 다른지 테스트할 수 있습니다.
숫자는 순서가 있으므로 실패 가능 연산자 < 를 사용하여 한 float가 다른 float보다 작은지 확인하고 실패 가능 연산자 > 를 사용하여 한 float가 다른 float보다 큰지 확인할 수 있습니다.
실패 가능 연산자 <= 를 사용하여 한 float가 다른 float보다 작거나 같은지 확인하고 실패 가능 연산자 >= 를 사용하여 한 float가 다른 float보다 크거나 같은지 확인할 수 있습니다.
NaN 은 다른 float처럼 비교 가능하며 다른 모든 float보다 크고 자기 자신과 같습니다.
# 상황을 설명하는 파라미터를 구성합니다.
DamageInflicted : float = 10.0
LifeDrainMultiplier : float = 0.125
var CurrentAttackerHealth : float = 99.0
MaxAttackerHealth : float = 100.0
# 가한 피해를 기반으로 현재 체력을 높입니다.
set CurrentAttackerHealth += DamageInflicted * HealingMultiplier
# 공격자가 자신의 최대 체력을 초과하여 치유되지 않게 합니다.
if (CurrentAttackerHealth > MaxAttackerHealth):
# 너무 높습니다! 최댓값으로 낮춥니다.
set CurrentAttackerHealth = MaxAttackerHealth
# CurrentAttackerHealth가 이제 100.0입니다.
표준 라이브러리
표준 라이브러리는 float를 생성하고 사용하는 데 도움이 되는 함수와 일반적인 수학 구조체 및 함수를 제공합니다. 이러한 기능에 대한 자세한 내용은 Verse API 레퍼런스를 참고하세요.
퍼시스턴스 타입
부동 소수점 값은 퍼시스턴스로, 모듈 스코프 weak_map 변수에서 이를 사용할 수 있고 게임 세션에 걸쳐 값이 지속될 수 있습니다. Verse의 퍼시스턴스에 대한 자세한 내용은 Verse에서 퍼시스턴스 데이터 사용하기를 참고하세요.