Integer Arithmetic Functions
include/math/arith.h View source View on GitHubFunctions
Section titled “Functions”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 Macros
Section titled “Macros”#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; \
})