Skip to content

FloatInit

Description

Create a zero-valued floating-point number.

This public macro supports both forms:

  • FloatInit() - uses DefaultAllocator().
  • FloatInit(alloc) - binds the supplied allocator.

Parameters

Name Direction Description
alloc in Optional allocator override.

Usage example (from documentation)

  Float value = FloatInit();

Success

Returns a fresh Float representing positive zero (negative=false, significand=0, exponent=0) with the chosen allocator bound through the inner Int. No heap allocation happens until the value is mutated.

Failure

Function cannot fail.

Usage example (Cross-references)

Usage examples (Cross-references)
        const char *start     = NULL;
        Str         temp      = StrInit();
        Float       parsed    = FloatInit();
    
        if (!i || !value) {
        }
    
        *out = FloatInit(alloc);
        return FloatTryFromStr(out, text);
    }
        }
    
        *out = FloatInit(alloc);
        return FloatTryFromStr(out, text);
    }
        {
            i64   target_exponent = lhs->exponent < rhs->exponent ? lhs->exponent : rhs->exponent;
            Float lhs_scaled      = FloatInit(lhs->significand.bits.allocator);
            Float rhs_scaled      = FloatInit(rhs->significand.bits.allocator);
            i64   target_exponent = lhs->exponent < rhs->exponent ? lhs->exponent : rhs->exponent;
            Float lhs_scaled      = FloatInit(lhs->significand.bits.allocator);
            Float rhs_scaled      = FloatInit(rhs->significand.bits.allocator);
    
            if (!FloatTryClone(&lhs_scaled, lhs) || !FloatTryClone(&rhs_scaled, rhs) ||
    
        ValidateFloat(value);
        clone = FloatInit(value->significand.bits.allocator);
        (void)FloatTryClone(&clone, value);
        return clone;
    
        ValidateFloat(value);
        *out          = FloatInit(value->significand.bits.allocator);
        out->negative = value->negative;
        out->exponent = value->exponent;
        if (!IntTryClone(&out->significand, &value->significand)) {
            FloatDeinit(out);
            *out = FloatInit(value->significand.bits.allocator);
            return false;
        }
        }
    
        *out = FloatInit(alloc);
        if (!float_try_int_from_u64(&out->significand, value, alloc)) {
            FloatDeinit(out);
        if (!float_try_int_from_u64(&out->significand, value, alloc)) {
            FloatDeinit(out);
            *out = FloatInit(alloc);
            return false;
        }
    
        ValidateInt(value);
        *out = FloatInit(value->bits.allocator);
        if (!IntTryClone(&out->significand, value)) {
            FloatDeinit(out);
        if (!IntTryClone(&out->significand, value)) {
            FloatDeinit(out);
            *out = FloatInit(value->bits.allocator);
            return false;
        }
        Float result;
    
        result = FloatInit(DefaultAllocator());
        (void)float_try_from_u64_value(&result, value, DefaultAllocator());
        float_normalize(&result);
    
    Float float_from_i64(i64 value) {
        Float result = FloatInit(DefaultAllocator());
    
        (void)float_try_from_i64_value(&result, value, DefaultAllocator());
    
        ValidateInt(value);
        result = FloatInit(value->bits.allocator);
        (void)float_try_from_int_value(&result, value);
        float_normalize(&result);
    
    Float float_from_f32(float value) {
        Float result = FloatInit(DefaultAllocator());
    
        (void)float_try_from_f32_value(&result, value, DefaultAllocator());
    
    Float float_from_f64(double value) {
        Float result = FloatInit(DefaultAllocator());
    
        (void)float_try_from_f64_value(&result, value, DefaultAllocator());
    
        ValidateFloat(out);
        result = FloatInit(out->significand.bits.allocator);
        digits = StrInit(out->significand.bits.allocator);
    
    Float FloatFromStr(const char *text) {
        Float result = FloatInit();
    
        (void)FloatTryFromStr(&result, text);
    
    int float_compare_int_with_error(Float *lhs, Int *rhs, bool *error) {
        Float rhs_value = FloatInit(lhs->significand.bits.allocator);
        int   cmp       = 0;
    
    int float_compare_u64_with_error(Float *lhs, u64 rhs, bool *error) {
        Float rhs_value = FloatInit(lhs->significand.bits.allocator);
        int   cmp       = 0;
    
    int float_compare_i64_with_error(Float *lhs, i64 rhs, bool *error) {
        Float rhs_value = FloatInit(lhs->significand.bits.allocator);
        int   cmp       = 0;
    
    int float_compare_f32_with_error(Float *lhs, float rhs, bool *error) {
        Float rhs_value = FloatInit(lhs->significand.bits.allocator);
        int   cmp       = 0;
    
    int float_compare_f64_with_error(Float *lhs, double rhs, bool *error) {
        Float rhs_value = FloatInit(lhs->significand.bits.allocator);
        int   cmp       = 0;
        ValidateFloat(a);
        ValidateFloat(b);
        lhs  = FloatInit(a->significand.bits.allocator);
        rhs  = FloatInit(b->significand.bits.allocator);
        temp = FloatInit(result->significand.bits.allocator);
        ValidateFloat(b);
        lhs  = FloatInit(a->significand.bits.allocator);
        rhs  = FloatInit(b->significand.bits.allocator);
        temp = FloatInit(result->significand.bits.allocator);
        lhs  = FloatInit(a->significand.bits.allocator);
        rhs  = FloatInit(b->significand.bits.allocator);
        temp = FloatInit(result->significand.bits.allocator);
    
        if (!FloatTryClone(&lhs, a) || !FloatTryClone(&rhs, b)) {
    
    bool float_add_int(Float *result, Float *a, Int *b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_int_value(&rhs, b)) {
    
    bool float_add_u64(Float *result, Float *a, u64 b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_u64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_add_i64(Float *result, Float *a, i64 b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_i64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_add_f32(Float *result, Float *a, float b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_f32_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_add_f64(Float *result, Float *a, double b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_f64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_sub(Float *result, Float *a, Float *b) {
        Float rhs = FloatInit(b->significand.bits.allocator);
    
        ValidateFloat(result);
    
    bool float_sub_int(Float *result, Float *a, Int *b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_int_value(&rhs, b)) {
    
    bool float_sub_u64(Float *result, Float *a, u64 b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_u64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_sub_i64(Float *result, Float *a, i64 b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_i64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_sub_f32(Float *result, Float *a, float b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_f32_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_sub_f64(Float *result, Float *a, double b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_f64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_mul(Float *result, Float *a, Float *b) {
        Float temp = FloatInit(result->significand.bits.allocator);
    
        ValidateFloat(result);
    
    bool float_mul_int(Float *result, Float *a, Int *b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_int_value(&rhs, b)) {
    
    bool float_mul_u64(Float *result, Float *a, u64 b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_u64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_mul_i64(Float *result, Float *a, i64 b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_i64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_mul_f32(Float *result, Float *a, float b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_f32_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_mul_f64(Float *result, Float *a, double b) {
        Float rhs = FloatInit(result->significand.bits.allocator);
    
        if (!float_try_from_f64_value(&rhs, b, result->significand.bits.allocator)) {
    
    bool float_div(Float *result, Float *a, Float *b, u64 precision) {
        Float temp   = FloatInit(result->significand.bits.allocator);
        Int   scale  = IntInit(result->significand.bits.allocator);
        Int   scaled = IntInit(result->significand.bits.allocator);
        }
        if (FloatIsZero(a)) {
            Float zero = FloatInit();
    
            FloatDeinit(result);
    
    bool float_div_int(Float *result, Float *a, Int *b, u64 precision) {
        Float rhs = FloatInit(result->significand.bits.allocator);
        bool  ok  = false;
    
    bool float_div_u64(Float *result, Float *a, u64 b, u64 precision) {
        Float rhs = FloatInit(result->significand.bits.allocator);
        bool  ok  = false;
    
    bool float_div_i64(Float *result, Float *a, i64 b, u64 precision) {
        Float rhs = FloatInit(result->significand.bits.allocator);
        bool  ok  = false;
    
    bool float_div_f32(Float *result, Float *a, float b, u64 precision) {
        Float rhs = FloatInit(result->significand.bits.allocator);
        bool  ok  = false;
    
    bool float_div_f64(Float *result, Float *a, double b, u64 precision) {
        Float rhs = FloatInit(result->significand.bits.allocator);
        bool  ok  = false;
        Float a            = FloatFromStr("1.2");
        Float b            = FloatFromStr("0.03");
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float a            = FloatFromStr(FLOAT_TEST_VERY_LARGE_ONES);
        Float b            = FloatFromStr(FLOAT_TEST_VERY_LARGE_TWOS);
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float b            = FloatFromStr("0.75");
        Int   whole        = IntFrom(2);
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float a            = FloatFromStr("1.5");
        Float b            = FloatFromStr("2");
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float a            = FloatFromStr(FLOAT_TEST_VERY_LARGE_THREES);
        Float b            = FloatFromStr(FLOAT_TEST_VERY_LARGE_ONES);
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float b            = FloatFromStr("0.5");
        Int   whole        = IntFrom(2);
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float a            = FloatFromStr("12.5");
        Float b            = FloatFromStr("-0.2");
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float a            = FloatFromStr(FLOAT_TEST_VERY_LARGE_ONES);
        Float b            = FloatFromStr("2");
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float b            = FloatFromStr("2");
        Int   whole        = IntFrom(2);
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float a            = FloatFromStr("1");
        Float b            = FloatFromStr("8");
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float a            = FloatFromStr(FLOAT_TEST_VERY_LARGE_TWOS);
        Float b            = FloatFromStr("2");
        Float result_value = FloatInit();
        Str   text         = StrInit();
        Float b            = FloatFromStr("2.5");
        Int   whole        = IntFrom(3);
        Float result_value = FloatInit();
        Str   text         = StrInit();
    
        Float a = FloatFromStr("1");
        Float b = FloatInit();
        Float r = FloatInit();
        bool  ok;
        Float a = FloatFromStr("1");
        Float b = FloatInit();
        Float r = FloatInit();
        bool  ok;
        bool        success = true;
    
        Float dec = FloatInit();
        Float sci = FloatInit();
        Float neg = FloatInit();
    
        Float dec = FloatInit();
        Float sci = FloatInit();
        Float neg = FloatInit();
        Float dec = FloatInit();
        Float sci = FloatInit();
        Float neg = FloatInit();
    
        Str dec_text = StrInit();
    
        Float parsed = FloatFromStr("12.3.4");
        Float value  = FloatInit();
        bool  result = !FloatTryFromStr(&value, "12.3.4");
    
        Float parsed = FloatFromStr(NULL);
        Float value  = FloatInit();
        bool  result = !FloatTryFromStr(&value, NULL);
        WriteFmt("Testing FloatIsZero\n");
    
        Float zero  = FloatInit();
        Float value = FloatFromStr("0.001");
    
    bool test_float_init(void) {
        WriteFmt("Testing FloatInit\n");
    
        Float value = FloatInit();
        WriteFmt("Testing FloatInit\n");
    
        Float value = FloatInit();
    
        bool result = FloatIsZero(&value);
        alloc.flags = 0x6D6Du;
    
        Float original = FloatInit(alloc);
        original.negative = true;
        original.exponent = -3;
Last updated on