Skip to content

FloatIsZero

Description

Test whether a floating-point value is exactly zero.

Parameters

Name Direction Description
value in Float to test

Usage example (from documentation)

  bool zero = FloatIsZero(&value);

Success

Returns true when the significand is zero.

Failure

Returns false when the value is non-zero. Cannot fail otherwise.

Usage example (Cross-references)

Usage examples (Cross-references)
        result = StrInit(alloc);
    
        if (FloatIsZero(value)) {
            if (value->negative) {
                if (!StrPushBackR(&result, '-')) {
        ValidateFloat(value);
    
        if (FloatIsZero(value)) {
            value->exponent = target_exponent;
            return true;
        }
    
        if (FloatIsZero(lhs) && FloatIsZero(rhs)) {
            *out = 0;
            return true;
    }
    
    bool FloatIsZero(const Float *value) {
        ValidateFloat(value);
        return IntIsZero(&value->significand);
    bool FloatIsNegative(const Float *value) {
        ValidateFloat(value);
        return !FloatIsZero(value) && value->negative;
    }
        }
    
        if (FloatIsZero(value)) {
            IntDeinit(result);
            *result = temp;
        *out = StrInit(alloc);
    
        if (FloatIsZero(value)) {
            return StrPushBackR(out, '0');
        }
        ValidateFloat(rhs);
    
        if (FloatIsZero(lhs) && FloatIsZero(rhs)) {
            return 0;
        }
        ValidateFloat(value);
    
        if (!FloatIsZero(value)) {
            value->negative = !value->negative;
        }
        ValidateFloat(b);
    
        if (FloatIsZero(b)) {
            LOG_ERROR("Division by zero");
            return false;
            return false;
        }
        if (FloatIsZero(a)) {
            Float zero = FloatInit(FloatAllocator(result));
        Float value = FloatInit(&alloc.base);
    
        bool result = FloatIsZero(&value);
        result      = result && !FloatIsNegative(&value);
        result      = result && (FloatExponent(&value) == 0);
        FloatClear(&value);
    
        bool result = FloatIsZero(&value);
        result      = result && !FloatIsNegative(&value);
        result      = result && (FloatExponent(&value) == 0);
    
        bool ok = FloatMul(&r, &zero, &big);
        ok      = ok && FloatIsZero(&r);
        ok      = ok && (FloatExponent(&r) == 0);
    
        // Sanity: both are zero.
        bool result = FloatIsZero(&normalized_zero) && FloatIsZero(&canonical_zero);
    
        // The normalized zero must hash identically to the canonical positive zero.
    
        ok = !FloatDiv(&r, &a, &b, 4);
        ok = ok && FloatIsZero(&r);
    
        FloatDeinit(&a);
    
        bool ok = !FloatDiv(&r, &a, 0u, 4);
        ok      = ok && FloatIsZero(&r);
    
        FloatDeinit(&a);
    
        bool ok = FloatAdd(&r, &a, &b);
        ok      = ok && FloatIsZero(&r);
    
        FloatDeinit(&a);
    
        bool ok = FloatDiv(&r, &a, &b, 4u);
        ok      = ok && FloatIsZero(&r);
    
        FloatDeinit(&a);
        bool  result = !FloatTryFromStr(&value, "12.3.4");
    
        result = result && FloatIsZero(&parsed);
        result = result && FloatIsZero(&value);
    
        result = result && FloatIsZero(&parsed);
        result = result && FloatIsZero(&value);
    
        FloatDeinit(&parsed);
    
        bool ok = FloatMul(&product, &zero, &neg);
        ok      = ok && FloatIsZero(&product);
    
        u64 h_product = float_hash(&product, 0);
    
    bool test_float_is_zero(void) {
        WriteFmt("Testing FloatIsZero\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        Float value = FloatFromStr("0.001", &alloc.base);
    
        bool result = FloatIsZero(&zero);
        result      = result && !FloatIsZero(&value);
    
        bool result = FloatIsZero(&zero);
        result      = result && !FloatIsZero(&value);
    
        FloatDeinit(&zero);
Last updated on