Skip to content

FloatAdd

FloatAdd

Description

Generic addition convenience macro for Float.

Parameters

Name Direction Description
result out Destination for the sum
a in Left operand
b in Right operand selected through generic dispatch

Usage example (from documentation)

  FloatAdd(&sum, &value, 1.25);

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    void(FloatAdd)(Float *result, Float *a, Float *b) {
        Float lhs  = FloatClone(a);
        Float rhs  = FloatClone(b);
        Float rhs = MISRA_PRIV_FloatFromInt(b);
    
        FloatAdd(result, a, &rhs);
        FloatDeinit(&rhs);
    }
        Float rhs = MISRA_PRIV_FloatFromU64(b);
    
        FloatAdd(result, a, &rhs);
        FloatDeinit(&rhs);
    }
        Float rhs = MISRA_PRIV_FloatFromI64(b);
    
        FloatAdd(result, a, &rhs);
        FloatDeinit(&rhs);
    }
        Float rhs = float_from_f32_value(b);
    
        FloatAdd(result, a, &rhs);
        FloatDeinit(&rhs);
    }
        Float rhs = float_from_f64_value(b);
    
        FloatAdd(result, a, &rhs);
        FloatDeinit(&rhs);
    }
    
        FloatNegate(&rhs);
        FloatAdd(result, a, &rhs);
        FloatDeinit(&rhs);
    }
    
    bool test_float_add_small_small(void) {
        WriteFmt("Testing FloatAdd with small floats\n");
    
        Float a            = FloatFromStr("1.2");
        Str   text         = StrInit();
    
        FloatAdd(&result_value, &a, &b);
        text = FloatToStr(&result_value);
    
    bool test_float_add_very_large_large(void) {
        WriteFmt("Testing FloatAdd with very large floats\n");
    
        Float a            = FloatFromStr(FLOAT_TEST_VERY_LARGE_ONES);
        Str   text         = StrInit();
    
        FloatAdd(&result_value, &a, &b);
        text = FloatToStr(&result_value);
    
    bool test_float_add_generic(void) {
        WriteFmt("Testing FloatAdd generic dispatch\n");
    
        Float a            = FloatFromStr("1.25");
        Str   text         = StrInit();
    
        FloatAdd(&result_value, &a, b);
        text = FloatToStr(&result_value);
        bool result = strcmp(text.data, "2") == 0;
    
        StrDeinit(&text);
        FloatAdd(&result_value, &a, whole);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "3.25") == 0);
    
        StrDeinit(&text);
        FloatAdd(&result_value, &a, 2u);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "3.25") == 0);
    
        StrDeinit(&text);
        FloatAdd(&result_value, &a, -1);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "0.25") == 0);
    
        StrDeinit(&text);
        FloatAdd(&result_value, &a, 0.75f);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "2") == 0);
    
        StrDeinit(&text);
        FloatAdd(&result_value, &a, 0.75);
        text   = FloatToStr(&result_value);
        result = result && (strcmp(text.data, "2") == 0);
    /// TAGS: Float, Math, Add
    ///
    void (FloatAdd)(Float *result, Float *a, Float *b);
    ///
    /// Subtract one float from another.
                (rhs),                                                                                                     \
                Float: MISRA_PRIV_FloatAddValueFloat,                                                                      \
                Float *: FloatAdd,                                                                                         \
                const Float *: MISRA_PRIV_FloatAddConstFloat,                                                              \
                Int: MISRA_PRIV_FloatAddValueInt,                                                                          \
Last updated on