Compare floats using FMath::IsNearlyEqual() & FMath::IsNearlyZero() in Unreal Engine 5 C++

Written on: 30 May 2025


Syntax


bool FMath::IsNearlyZero(float Value, float ErrorTolerance = UE_SMALL_NUMBER);

bool FMath::IsNearlyEqual(float A, float B, float ErrorTolerance = UE_SMALL_NUMBER);


Explanation

// Error 1: Substracting the same value does not give 0
float A = 1.2;
bool bIsAZero = (A - 1.2 == 0.0);  // false
bool bIsANearlyZero = FMath::IsNearlyZero(A - 1.2, UE_KINDA_SMALL_NUMBER);  // true, Use `UE_KINDA_SMALL_NUMBER` not the default `UE_SMALL_NUMBER`


// Error 2: Comparing same values does not give true
float B = 2.8;
bool bIsBEqual = (B + 2.8 == B * 2.0);  // false
bool bIsBNearlyEqual = FMath::IsNearlyEqual(B + 2.8, B * 2.0, UE_KINDA_SMALL_NUMBER);  // true, Use `UE_KINDA_SMALL_NUMBER` not the default `UE_SMALL_NUMBER`


UE_LOG(LogTemp, Warning, TEXT("bIsAZero: %s"), bIsAZero ? TEXT("true") : TEXT("false"));
UE_LOG(LogTemp, Warning, TEXT("bIsANearlyZero: %s"), bIsANearlyZero ? TEXT("true") : TEXT("false"));
UE_LOG(LogTemp, Warning, TEXT("bIsBEqual: %s"), bIsBEqual ? TEXT("true") : TEXT("false"));
UE_LOG(LogTemp, Warning, TEXT("bIsBNearlyEqual: %s"), bIsBNearlyEqual ? TEXT("true") : TEXT("false"));