Skip to content

FloatDiv

FloatDiv

Description

Generic division convenience macro for Float.

Parameters

Name Direction Description
result out Destination for the quotient
a in Dividend
b in Divisor selected through generic dispatch
precision in Decimal precision to retain

Usage example (from documentation)

  FloatDiv(&quotient, &value, 3.0, 8);

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    void(FloatDiv)(Float *result, Float *a, Float *b, u64 precision) {
        Float temp   = FloatInit();
        Int   scale  = IntInit();
        Float rhs = MISRA_PRIV_FloatFromInt(b);
    
        FloatDiv(result, a, &rhs, precision);
        FloatDeinit(&rhs);
    }
        Float rhs = MISRA_PRIV_FloatFromU64(b);
    
        FloatDiv(result, a, &rhs, precision);
        FloatDeinit(&rhs);
    }
        Float rhs = MISRA_PRIV_FloatFromI64(b);
    
        FloatDiv(result, a, &rhs, precision);
        FloatDeinit(&rhs);
    }
        Float rhs = float_from_f32_value(b);
    
        FloatDiv(result, a, &rhs, precision);
        FloatDeinit(&rhs);
    }
        Float rhs = float_from_f64_value(b);
    
        FloatDiv(result, a, &rhs, precision);
        FloatDeinit(&rhs);
    }
    
    bool test_float_div_small_small(void) {
        WriteFmt("Testing FloatDiv with small floats\n");
    
        Float a            = FloatFromStr("1");
        Str   text         = StrInit();
    
        FloatDiv(&result_value, &a, &b, 3);
        text = FloatToStr(&result_value);
    
    bool test_float_div_very_large_small(void) {
        WriteFmt("Testing FloatDiv with very large and small floats\n");
    
        Float a            = FloatFromStr(FLOAT_TEST_VERY_LARGE_TWOS);
        Str   text         = StrInit();
    
        FloatDiv(&result_value, &a, &b, 0);
        text = FloatToStr(&result_value);
    
    bool test_float_div_generic(void) {
        WriteFmt("Testing FloatDiv generic dispatch\n");
    
        Float a            = FloatFromStr("7.5");
        Str   text         = StrInit();
    
        FloatDiv(&result_value, &a, b, 1);
        text = FloatToStr(&result_value);
        bool result = strcmp(text.data, "3") == 0;
    
        StrDeinit(&text);
        FloatDiv(&result_value, &a, whole, 1);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "2.5") == 0);
    
        StrDeinit(&text);
        FloatDiv(&result_value, &a, 3u, 1);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "2.5") == 0);
    
        StrDeinit(&text);
        FloatDiv(&result_value, &a, -3, 1);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "-2.5") == 0);
    
        StrDeinit(&text);
        FloatDiv(&result_value, &a, 0.5f, 1);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "15") == 0);
    
        StrDeinit(&text);
        FloatDiv(&result_value, &a, 0.5, 1);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "15") == 0);
    
    bool test_float_div_by_zero(void) {
        WriteFmt("Testing FloatDiv divide-by-zero handling\n");
    
        Float a = FloatFromStr("1");
        Float r = FloatInit();
    
        FloatDiv(&r, &a, &b, 4);
        return false;
    }
    /// TAGS: Float, Math, Divide, Precision
    ///
    void (FloatDiv)(Float *result, Float *a, Float *b, u64 precision);
    #ifndef __cplusplus
    #    define MISRA_FLOAT_ADD_DISPATCH(rhs)                                                                              \
                (rhs),                                                                                                     \
                Float: MISRA_PRIV_FloatDivValueFloat,                                                                      \
                Float *: FloatDiv,                                                                                         \
                const Float *: MISRA_PRIV_FloatDivConstFloat,                                                              \
                Int: MISRA_PRIV_FloatDivValueInt,                                                                          \
Last updated on