Skip to content

Integer Arithmetic Functions

include/math/arith.h View source View on GitHub
cc_constfn size_t gcd(size_t a, size_t b)
source
cc_constfn size_t lcm(size_t a, size_t b)
source
cc_constfn size_t ipow(size_t base, int32_t exp)
source
#define isqrt(n_)
source
Expansion
#define isqrt(n_) \
    ({ \
        typeof(n_) __isqrt_val = (n_); \
        typeof(n_) __isqrt_res = 0; \
        if (__isqrt_val > 0) { \
            typeof(n_) __isqrt_x0 = __isqrt_val / 2; \
            if (__isqrt_x0 == 0) { \
                __isqrt_res = 1; \
            } else { \
                typeof(n_) __isqrt_x1 = \
                    (__isqrt_x0 + __isqrt_val / __isqrt_x0) / 2; \
                while (__isqrt_x1 < __isqrt_x0) { \
                    __isqrt_x0 = __isqrt_x1; \
                    __isqrt_x1 = (__isqrt_x0 + __isqrt_val / __isqrt_x0) / 2; \
                } \
                __isqrt_res = __isqrt_x0; \
            } \
        } \
        __isqrt_res; \
    })