|
| 1 | + |
| 2 | +All constants are compile-time initialized via string → `decimal_t<T>` conversion. High-precision decimal constants defined in `math::constants<T>`, where `T` controls precision. |
| 3 | + |
| 4 | + |
| 5 | +=== "Example" |
| 6 | + ```cpp |
| 7 | + using decimal = math::constants<uint64_t>; |
| 8 | + |
| 9 | + auto x = decimal::pi; |
| 10 | + auto y = decimal::sqrt2; |
| 11 | + auto z = decimal::deg_to_rad * angle; |
| 12 | + // composability |
| 13 | + auto circumference = decimal::two_pi * r; |
| 14 | + auto angle_rad = deg * decimal::deg_to_rad; |
| 15 | + auto exp_growth = decimal::e.pow(t); |
| 16 | + ``` |
| 17 | +=== ":material-decimal-decrease:{.icon} decimal32" |
| 18 | + |
| 19 | + ```cpp |
| 20 | + template <> struct constants<uint32_t>{ // 7 digit precision |
| 21 | + using decimal_t = typename math::decimal_t<uint32_t>; |
| 22 | + inline static const decimal_t nan = static_cast<decimal_t>("nan"); |
| 23 | + inline static const decimal_t inf = static_cast<decimal_t>("inf"); |
| 24 | + inline static const decimal_t zero = static_cast<decimal_t>("0"); |
| 25 | + inline static const decimal_t one = static_cast<decimal_t>("1"); |
| 26 | + |
| 27 | + inline static const decimal_t pi = static_cast<decimal_t>("3.141593"); |
| 28 | + inline static const decimal_t tau = static_cast<decimal_t>("6.283185"); |
| 29 | + inline static const decimal_t e = static_cast<decimal_t>("2.718282"); |
| 30 | + inline static const decimal_t phi = static_cast<decimal_t>("1.618034"); |
| 31 | + inline static const decimal_t golden_ratio = phi; |
| 32 | + inline static const decimal_t silver_ratio = static_cast<decimal_t>("2.414214"); |
| 33 | + inline static const decimal_t sqrt2 = static_cast<decimal_t>("1.414214"); |
| 34 | + inline static const decimal_t sqrt3 = static_cast<decimal_t>("1.732051"); |
| 35 | + inline static const decimal_t sqrt5 = static_cast<decimal_t>("2.236068"); |
| 36 | + inline static const decimal_t ln2 = static_cast<decimal_t>("0.693147"); |
| 37 | + inline static const decimal_t ln10 = static_cast<decimal_t>("2.302586"); |
| 38 | + inline static const decimal_t log2e = static_cast<decimal_t>("1.442696"); |
| 39 | + inline static const decimal_t log10e = static_cast<decimal_t>("0.4342945"); |
| 40 | + inline static const decimal_t deg_to_rad = static_cast<decimal_t>("0.01745329"); |
| 41 | + inline static const decimal_t rad_to_deg = static_cast<decimal_t>("57.29578"); |
| 42 | + inline static const decimal_t inv_pi = static_cast<decimal_t>("0.3183099"); |
| 43 | + inline static const decimal_t two_pi = static_cast<decimal_t>("6.283185"); |
| 44 | + inline static const decimal_t half_pi = static_cast<decimal_t>("1.570796"); |
| 45 | + inline static const decimal_t quarter_pi = static_cast<decimal_t>("0.7853982"); |
| 46 | + inline static const decimal_t cube_root_2 = static_cast<decimal_t>("1.259921"); |
| 47 | + inline static const decimal_t cube_root_3 = static_cast<decimal_t>("1.4422496"); |
| 48 | + }; |
| 49 | + ``` |
| 50 | +=== ":material-decimal:{.icon} decimal64" |
| 51 | + |
| 52 | + ```cpp |
| 53 | + template <> struct constants<uint64_t> { // 16 digit precision |
| 54 | + using decimal_t = typename math::decimal_t<uint64_t>; |
| 55 | + inline static const decimal_t nan = static_cast<decimal_t>("nan"); |
| 56 | + inline static const decimal_t inf = static_cast<decimal_t>("inf"); |
| 57 | + inline static const decimal_t zero = static_cast<decimal_t>("0"); |
| 58 | + inline static const decimal_t one = static_cast<decimal_t>("1"); |
| 59 | + |
| 60 | + inline static const decimal_t pi = static_cast<decimal_t>("3.141592653589793"); |
| 61 | + inline static const decimal_t tau = static_cast<decimal_t>("6.283185307179586"); |
| 62 | + inline static const decimal_t e = static_cast<decimal_t>("2.718281828459045"); |
| 63 | + inline static const decimal_t phi = static_cast<decimal_t>("1.618033988749895"); |
| 64 | + inline static const decimal_t silver_ratio = static_cast<decimal_t>("2.414213562373095"); |
| 65 | + inline static const decimal_t sqrt2 = static_cast<decimal_t>("1.414213562373095"); |
| 66 | + inline static const decimal_t sqrt3 = static_cast<decimal_t>("1.732050807568877"); |
| 67 | + inline static const decimal_t sqrt5 = static_cast<decimal_t>("2.236067977499790"); |
| 68 | + inline static const decimal_t ln2 = static_cast<decimal_t>("0.6931471805599453"); |
| 69 | + inline static const decimal_t ln10 = static_cast<decimal_t>("2.302585092994046"); |
| 70 | + inline static const decimal_t log2e = static_cast<decimal_t>("1.442695040888963"); |
| 71 | + inline static const decimal_t log10e = static_cast<decimal_t>("0.4342944819032518"); |
| 72 | + inline static const decimal_t deg_to_rad = static_cast<decimal_t>("0.01745329251994330"); |
| 73 | + inline static const decimal_t rad_to_deg = static_cast<decimal_t>("57.29577951308232"); |
| 74 | + inline static const decimal_t inv_pi = static_cast<decimal_t>("0.3183098861837907"); |
| 75 | + inline static const decimal_t two_pi = static_cast<decimal_t>("6.283185307179586"); |
| 76 | + inline static const decimal_t half_pi = static_cast<decimal_t>("1.570796326794897"); |
| 77 | + inline static const decimal_t quarter_pi = static_cast<decimal_t>("0.785398163397448"); |
| 78 | + inline static const decimal_t cube_root_2 = static_cast<decimal_t>("1.259921049894873"); |
| 79 | + inline static const decimal_t cube_root_3 = static_cast<decimal_t>("1.442249570307408"); |
| 80 | + }; |
| 81 | + ``` |
| 82 | +=== ":material-decimal-increase:{.icon} decimal128" |
| 83 | + |
| 84 | + ```cpp |
| 85 | + template <> struct constants<BID_UINT128> { // 34 digit precision |
| 86 | + using decimal_t = typename math::decimal_t<BID_UINT128>; |
| 87 | + inline static const decimal_t nan = static_cast<decimal_t>("nan"); |
| 88 | + inline static const decimal_t inf = static_cast<decimal_t>("inf"); |
| 89 | + inline static const decimal_t zero = static_cast<decimal_t>("0"); |
| 90 | + inline static const decimal_t one = static_cast<decimal_t>("1"); |
| 91 | + |
| 92 | + inline static const decimal_t pi = static_cast<decimal_t>("3.1415926535897932384626433832795029"); |
| 93 | + inline static const decimal_t tau = static_cast<decimal_t>("6.2831853071795864769252867665590058"); |
| 94 | + inline static const decimal_t e = static_cast<decimal_t>("2.7182818284590452353602874713526625"); |
| 95 | + inline static const decimal_t phi = static_cast<decimal_t>("1.6180339887498948482045868343656381"); |
| 96 | + inline static const decimal_t golden_ratio = phi; |
| 97 | + inline static const decimal_t silver_ratio = static_cast<decimal_t>("2.4142135623730950488016887242096981"); |
| 98 | + inline static const decimal_t sqrt2 = static_cast<decimal_t>("1.4142135623730950488016887242096981"); |
| 99 | + inline static const decimal_t sqrt3 = static_cast<decimal_t>("1.7320508075688772935274463415058724"); |
| 100 | + inline static const decimal_t sqrt5 = static_cast<decimal_t>("2.2360679774997896964091736687312762"); |
| 101 | + inline static const decimal_t ln2 = static_cast<decimal_t>("0.6931471805599453094172321214581766"); |
| 102 | + inline static const decimal_t ln10 = static_cast<decimal_t>("2.3025850929940456840179914546843642"); |
| 103 | + inline static const decimal_t log2e = static_cast<decimal_t>("1.4426950408889634073599246810018921"); |
| 104 | + inline static const decimal_t log10e = static_cast<decimal_t>("0.4342944819032518276511289189166051"); |
| 105 | + inline static const decimal_t deg_to_rad = static_cast<decimal_t>("0.0174532925199432957692369076848861"); |
| 106 | + inline static const decimal_t rad_to_deg = static_cast<decimal_t>("57.2957795130823208767981548141051703"); |
| 107 | + inline static const decimal_t inv_pi = static_cast<decimal_t>("0.3183098861837906715377675267450287"); |
| 108 | + inline static const decimal_t two_pi = tau; |
| 109 | + inline static const decimal_t half_pi = static_cast<decimal_t>("1.5707963267948966192313216916397514"); |
| 110 | + inline static const decimal_t quarter_pi = static_cast<decimal_t>("0.7853981633974483096156608458198757"); |
| 111 | + inline static const decimal_t cube_root_2 = static_cast<decimal_t>("1.2599210498948731647672106072782284"); |
| 112 | + inline static const decimal_t cube_root_3 = static_cast<decimal_t>("1.4422495703074083823216383107801096"); |
| 113 | + }; |
| 114 | + ``` |
| 115 | + |
| 116 | +<div class="clear-both"></div> |
0 commit comments