annotate armadillo-3.900.4/include/armadillo_bits/constants.hpp @ 84:55a047986812 tip

Update library URI so as not to be document-local
author Chris Cannam
date Wed, 22 Apr 2020 14:21:57 +0100
parents 1ec0e2823891
children
rev   line source
Chris@49 1 // Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
Chris@49 2 // Copyright (C) 2008-2012 Conrad Sanderson
Chris@49 3 //
Chris@49 4 // This Source Code Form is subject to the terms of the Mozilla Public
Chris@49 5 // License, v. 2.0. If a copy of the MPL was not distributed with this
Chris@49 6 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
Chris@49 7
Chris@49 8
Chris@49 9 //! \addtogroup constants
Chris@49 10 //! @{
Chris@49 11
Chris@49 12
Chris@49 13 namespace priv
Chris@49 14 {
Chris@49 15 class Datum_helper
Chris@49 16 {
Chris@49 17 public:
Chris@49 18
Chris@49 19 template<typename eT>
Chris@49 20 static
Chris@49 21 typename arma_real_only<eT>::result
Chris@49 22 nan(typename arma_real_only<eT>::result* junk = 0)
Chris@49 23 {
Chris@49 24 arma_ignore(junk);
Chris@49 25
Chris@49 26 if(std::numeric_limits<eT>::has_quiet_NaN == true)
Chris@49 27 {
Chris@49 28 return std::numeric_limits<eT>::quiet_NaN();
Chris@49 29 }
Chris@49 30 else
Chris@49 31 {
Chris@49 32 return eT(0);
Chris@49 33 }
Chris@49 34 }
Chris@49 35
Chris@49 36
Chris@49 37 template<typename eT>
Chris@49 38 static
Chris@49 39 typename arma_cx_only<eT>::result
Chris@49 40 nan(typename arma_cx_only<eT>::result* junk = 0)
Chris@49 41 {
Chris@49 42 arma_ignore(junk);
Chris@49 43
Chris@49 44 typedef typename get_pod_type<eT>::result T;
Chris@49 45
Chris@49 46 return eT( Datum_helper::nan<T>(), Datum_helper::nan<T>() );
Chris@49 47 }
Chris@49 48
Chris@49 49
Chris@49 50 template<typename eT>
Chris@49 51 static
Chris@49 52 typename arma_integral_only<eT>::result
Chris@49 53 nan(typename arma_integral_only<eT>::result* junk = 0)
Chris@49 54 {
Chris@49 55 arma_ignore(junk);
Chris@49 56
Chris@49 57 return eT(0);
Chris@49 58 }
Chris@49 59
Chris@49 60
Chris@49 61 template<typename eT>
Chris@49 62 static
Chris@49 63 typename arma_real_only<eT>::result
Chris@49 64 inf(typename arma_real_only<eT>::result* junk = 0)
Chris@49 65 {
Chris@49 66 arma_ignore(junk);
Chris@49 67
Chris@49 68 if(std::numeric_limits<eT>::has_infinity == true)
Chris@49 69 {
Chris@49 70 return std::numeric_limits<eT>::infinity();
Chris@49 71 }
Chris@49 72 else
Chris@49 73 {
Chris@49 74 return std::numeric_limits<eT>::max();
Chris@49 75 }
Chris@49 76 }
Chris@49 77
Chris@49 78
Chris@49 79 template<typename eT>
Chris@49 80 static
Chris@49 81 typename arma_cx_only<eT>::result
Chris@49 82 inf(typename arma_cx_only<eT>::result* junk = 0)
Chris@49 83 {
Chris@49 84 arma_ignore(junk);
Chris@49 85
Chris@49 86 typedef typename get_pod_type<eT>::result T;
Chris@49 87
Chris@49 88 return eT( Datum_helper::inf<T>(), Datum_helper::inf<T>() );
Chris@49 89 }
Chris@49 90
Chris@49 91
Chris@49 92 template<typename eT>
Chris@49 93 static
Chris@49 94 typename arma_integral_only<eT>::result
Chris@49 95 inf(typename arma_integral_only<eT>::result* junk = 0)
Chris@49 96 {
Chris@49 97 arma_ignore(junk);
Chris@49 98
Chris@49 99 return std::numeric_limits<eT>::max();
Chris@49 100 }
Chris@49 101
Chris@49 102 };
Chris@49 103 }
Chris@49 104
Chris@49 105
Chris@49 106
Chris@49 107 //! various constants.
Chris@49 108 //! Physical constants taken from NIST and WolframAlpha on 2009-06-23
Chris@49 109 //! http://physics.nist.gov/cuu/Constants
Chris@49 110 //! http://www.wolframalpha.com
Chris@49 111 //! See also http://en.wikipedia.org/wiki/Physical_constant
Chris@49 112
Chris@49 113
Chris@49 114 template<typename eT>
Chris@49 115 class Datum
Chris@49 116 {
Chris@49 117 public:
Chris@49 118
Chris@49 119 static const eT pi; //!< ratio of any circle's circumference to its diameter
Chris@49 120 static const eT e; //!< base of the natural logarithm
Chris@49 121 static const eT euler; //!< Euler's constant, aka Euler-Mascheroni constant
Chris@49 122 static const eT gratio; //!< golden ratio
Chris@49 123 static const eT sqrt2; //!< square root of 2
Chris@49 124 static const eT eps; //!< the difference between 1 and the least value greater than 1 that is representable
Chris@49 125 static const eT log_min; //!< log of the minimum representable value
Chris@49 126 static const eT log_max; //!< log of the maximum representable value
Chris@49 127 static const eT nan; //!< "not a number"
Chris@49 128 static const eT inf; //!< infinity
Chris@49 129
Chris@49 130 //
Chris@49 131
Chris@49 132 static const eT m_u; //!< atomic mass constant (in kg)
Chris@49 133 static const eT N_A; //!< Avogadro constant
Chris@49 134 static const eT k; //!< Boltzmann constant (in joules per kelvin)
Chris@49 135 static const eT k_evk; //!< Boltzmann constant (in eV/K)
Chris@49 136 static const eT a_0; //!< Bohr radius (in meters)
Chris@49 137 static const eT mu_B; //!< Bohr magneton
Chris@49 138 static const eT Z_0; //!< characteristic impedance of vacuum (in ohms)
Chris@49 139 static const eT G_0; //!< conductance quantum (in siemens)
Chris@49 140 static const eT k_e; //!< Coulomb's constant (in meters per farad)
Chris@49 141 static const eT eps_0; //!< electric constant (in farads per meter)
Chris@49 142 static const eT m_e; //!< electron mass (in kg)
Chris@49 143 static const eT eV; //!< electron volt (in joules)
Chris@49 144 static const eT ec; //!< elementary charge (in coulombs)
Chris@49 145 static const eT F; //!< Faraday constant (in coulombs)
Chris@49 146 static const eT alpha; //!< fine-structure constant
Chris@49 147 static const eT alpha_inv; //!< inverse fine-structure constant
Chris@49 148 static const eT K_J; //!< Josephson constant
Chris@49 149 static const eT mu_0; //!< magnetic constant (in henries per meter)
Chris@49 150 static const eT phi_0; //!< magnetic flux quantum (in webers)
Chris@49 151 static const eT R; //!< molar gas constant (in joules per mole kelvin)
Chris@49 152 static const eT G; //!< Newtonian constant of gravitation (in newton square meters per kilogram squared)
Chris@49 153 static const eT h; //!< Planck constant (in joule seconds)
Chris@49 154 static const eT h_bar; //!< Planck constant over 2 pi, aka reduced Planck constant (in joule seconds)
Chris@49 155 static const eT m_p; //!< proton mass (in kg)
Chris@49 156 static const eT R_inf; //!< Rydberg constant (in reciprocal meters)
Chris@49 157 static const eT c_0; //!< speed of light in vacuum (in meters per second)
Chris@49 158 static const eT sigma; //!< Stefan-Boltzmann constant
Chris@49 159 static const eT R_k; //!< von Klitzing constant (in ohms)
Chris@49 160 static const eT b; //!< Wien wavelength displacement law constant
Chris@49 161 };
Chris@49 162
Chris@49 163
Chris@49 164 // the long lengths of the constants are for future support of "long double"
Chris@49 165 // and any smart compiler that does high-precision computation at compile-time
Chris@49 166
Chris@49 167 template<typename eT> const eT Datum<eT>::pi = eT(3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679);
Chris@49 168 template<typename eT> const eT Datum<eT>::e = eT(2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274);
Chris@49 169 template<typename eT> const eT Datum<eT>::euler = eT(0.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495);
Chris@49 170 template<typename eT> const eT Datum<eT>::gratio = eT(1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374);
Chris@49 171 template<typename eT> const eT Datum<eT>::sqrt2 = eT(1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727);
Chris@49 172 template<typename eT> const eT Datum<eT>::eps = std::numeric_limits<eT>::epsilon();
Chris@49 173 template<typename eT> const eT Datum<eT>::log_min = std::log(std::numeric_limits<eT>::min());
Chris@49 174 template<typename eT> const eT Datum<eT>::log_max = std::log(std::numeric_limits<eT>::max());
Chris@49 175 template<typename eT> const eT Datum<eT>::nan = priv::Datum_helper::nan<eT>();
Chris@49 176 template<typename eT> const eT Datum<eT>::inf = priv::Datum_helper::inf<eT>();
Chris@49 177
Chris@49 178 template<typename eT> const eT Datum<eT>::m_u = eT(1.660538782e-27);
Chris@49 179 template<typename eT> const eT Datum<eT>::N_A = eT(6.02214179e23);
Chris@49 180 template<typename eT> const eT Datum<eT>::k = eT(1.3806504e-23);
Chris@49 181 template<typename eT> const eT Datum<eT>::k_evk = eT(8.617343e-5);
Chris@49 182 template<typename eT> const eT Datum<eT>::a_0 = eT(0.52917720859e-10);
Chris@49 183 template<typename eT> const eT Datum<eT>::mu_B = eT(927.400915e-26);
Chris@49 184 template<typename eT> const eT Datum<eT>::Z_0 = eT(3.76730313461771e-2);
Chris@49 185 template<typename eT> const eT Datum<eT>::G_0 = eT(7.7480917004e-5);
Chris@49 186 template<typename eT> const eT Datum<eT>::k_e = eT(8.9875517873681764e9);
Chris@49 187 template<typename eT> const eT Datum<eT>::eps_0 = eT(8.85418781762039e-12);
Chris@49 188 template<typename eT> const eT Datum<eT>::m_e = eT(9.10938215e-31);
Chris@49 189 template<typename eT> const eT Datum<eT>::eV = eT(1.602176487e-19);
Chris@49 190 template<typename eT> const eT Datum<eT>::ec = eT(1.602176487e-19);
Chris@49 191 template<typename eT> const eT Datum<eT>::F = eT(96485.3399);
Chris@49 192 template<typename eT> const eT Datum<eT>::alpha = eT(7.2973525376e-3);
Chris@49 193 template<typename eT> const eT Datum<eT>::alpha_inv = eT(137.035999679);
Chris@49 194 template<typename eT> const eT Datum<eT>::K_J = eT(483597.891e9);
Chris@49 195 template<typename eT> const eT Datum<eT>::mu_0 = eT(1.25663706143592e-06);
Chris@49 196 template<typename eT> const eT Datum<eT>::phi_0 = eT(2.067833667e-15);
Chris@49 197 template<typename eT> const eT Datum<eT>::R = eT(8.314472);
Chris@49 198 template<typename eT> const eT Datum<eT>::G = eT(6.67428e-11);
Chris@49 199 template<typename eT> const eT Datum<eT>::h = eT(6.62606896e-34);
Chris@49 200 template<typename eT> const eT Datum<eT>::h_bar = eT(1.054571628e-34);
Chris@49 201 template<typename eT> const eT Datum<eT>::m_p = eT(1.672621637e-27);
Chris@49 202 template<typename eT> const eT Datum<eT>::R_inf = eT(10973731.568527);
Chris@49 203 template<typename eT> const eT Datum<eT>::c_0 = eT(299792458.0);
Chris@49 204 template<typename eT> const eT Datum<eT>::sigma = eT(5.670400e-8);
Chris@49 205 template<typename eT> const eT Datum<eT>::R_k = eT(25812.807557);
Chris@49 206 template<typename eT> const eT Datum<eT>::b = eT(2.8977685e-3);
Chris@49 207
Chris@49 208
Chris@49 209
Chris@49 210 typedef Datum<float> fdatum;
Chris@49 211 typedef Datum<double> datum;
Chris@49 212
Chris@49 213
Chris@49 214
Chris@49 215
Chris@49 216 namespace priv
Chris@49 217 {
Chris@49 218
Chris@49 219 template<typename eT>
Chris@49 220 static
Chris@49 221 arma_inline
Chris@49 222 arma_hot
Chris@49 223 typename arma_real_only<eT>::result
Chris@49 224 most_neg(typename arma_real_only<eT>::result* junk = 0)
Chris@49 225 {
Chris@49 226 arma_ignore(junk);
Chris@49 227
Chris@49 228 if(std::numeric_limits<eT>::has_infinity == true)
Chris@49 229 {
Chris@49 230 return -(std::numeric_limits<eT>::infinity());
Chris@49 231 }
Chris@49 232 else
Chris@49 233 {
Chris@49 234 return -(std::numeric_limits<eT>::max());
Chris@49 235 }
Chris@49 236 }
Chris@49 237
Chris@49 238
Chris@49 239 template<typename eT>
Chris@49 240 static
Chris@49 241 arma_inline
Chris@49 242 arma_hot
Chris@49 243 typename arma_integral_only<eT>::result
Chris@49 244 most_neg(typename arma_integral_only<eT>::result* junk = 0)
Chris@49 245 {
Chris@49 246 arma_ignore(junk);
Chris@49 247
Chris@49 248 return std::numeric_limits<eT>::min();
Chris@49 249 }
Chris@49 250
Chris@49 251
Chris@49 252 template<typename eT>
Chris@49 253 static
Chris@49 254 arma_inline
Chris@49 255 arma_hot
Chris@49 256 typename arma_real_only<eT>::result
Chris@49 257 most_pos(typename arma_real_only<eT>::result* junk = 0)
Chris@49 258 {
Chris@49 259 arma_ignore(junk);
Chris@49 260
Chris@49 261 if(std::numeric_limits<eT>::has_infinity == true)
Chris@49 262 {
Chris@49 263 return std::numeric_limits<eT>::infinity();
Chris@49 264 }
Chris@49 265 else
Chris@49 266 {
Chris@49 267 return std::numeric_limits<eT>::max();
Chris@49 268 }
Chris@49 269 }
Chris@49 270
Chris@49 271
Chris@49 272 template<typename eT>
Chris@49 273 static
Chris@49 274 arma_inline
Chris@49 275 arma_hot
Chris@49 276 typename arma_integral_only<eT>::result
Chris@49 277 most_pos(typename arma_integral_only<eT>::result* junk = 0)
Chris@49 278 {
Chris@49 279 arma_ignore(junk);
Chris@49 280
Chris@49 281 return std::numeric_limits<eT>::max();
Chris@49 282 }
Chris@49 283
Chris@49 284 }
Chris@49 285
Chris@49 286
Chris@49 287
Chris@49 288 //! @}