[numerics.c] # 29 Numerics library [[numerics]](./#numerics) ## 29.11 C compatibility [numerics.c] ### [29.11.1](#stdckdint.h.syn) Header synopsis [[stdckdint.h.syn]](stdckdint.h.syn) [🔗](#header:%3cstdckdint.h%3e) #define __STDC_VERSION_STDCKDINT_H__ 202311Ltemplatebool ckd_add(type1* result, type2 a, type3 b);templatebool ckd_sub(type1* result, type2 a, type3 b);templatebool ckd_mul(type1* result, type2 a, type3 b); [1](#stdckdint.h.syn-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L20627) See also: ISO/IEC 9899:2024, 7.20 ### [29.11.2](#ckdint) Checked integer operations [[numerics.c.ckdint]](numerics.c.ckdint) [🔗](#lib:ckd_add) `template bool ckd_add(type1* result, type2 a, type3 b); template bool ckd_sub(type1* result, type2 a, type3 b); template bool ckd_mul(type1* result, type2 a, type3 b); ` [1](#ckdint-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L20645) *Mandates*: Each of the types type1, type2, and type3 is a cv-unqualified signed or unsigned integer type[.](#ckdint-1.sentence-1) [2](#ckdint-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L20650) *Remarks*: Each function template has the same semantics as the corresponding type-generic macro with the same name specified in ISO/IEC 9899:2024, 7.20[.](#ckdint-2.sentence-1)