annotate armadillo-3.900.4/include/armadillo_bits/constants_compat.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-2011 NICTA (www.nicta.com.au)
Chris@49 2 // Copyright (C) 2008-2011 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_compat
Chris@49 10 //! @{
Chris@49 11
Chris@49 12
Chris@49 13 // the Math and Phy classes are kept for compatibility with old code;
Chris@49 14 // for new code, use the Datum class instead
Chris@49 15 // eg. instead of math::pi(), use datum::pi
Chris@49 16
Chris@49 17
Chris@49 18 template<typename eT>
Chris@49 19 class Math
Chris@49 20 {
Chris@49 21 public:
Chris@49 22
Chris@49 23 // the long lengths of the constants are for future support of "long double"
Chris@49 24 // and any smart compiler that does high-precision computation at compile-time
Chris@49 25
Chris@49 26 //! ratio of any circle's circumference to its diameter
Chris@49 27 static eT pi() { return eT(3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679); }
Chris@49 28
Chris@49 29 //! base of the natural logarithm
Chris@49 30 static eT e() { return eT(2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274); }
Chris@49 31
Chris@49 32 //! Euler's constant, aka Euler-Mascheroni constant
Chris@49 33 static eT euler() { return eT(0.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495); }
Chris@49 34
Chris@49 35 //! golden ratio
Chris@49 36 static eT gratio() { return eT(1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374); }
Chris@49 37
Chris@49 38 //! square root of 2
Chris@49 39 static eT sqrt2() { return eT(1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727); }
Chris@49 40
Chris@49 41 //! the difference between 1 and the least value greater than 1 that is representable
Chris@49 42 static eT eps() { return std::numeric_limits<eT>::epsilon(); }
Chris@49 43
Chris@49 44 //! log of the minimum representable value
Chris@49 45 static eT log_min() { static const eT out = std::log(std::numeric_limits<eT>::min()); return out; }
Chris@49 46
Chris@49 47 //! log of the maximum representable value
Chris@49 48 static eT log_max() { static const eT out = std::log(std::numeric_limits<eT>::max()); return out; }
Chris@49 49
Chris@49 50 //! "not a number"
Chris@49 51 static eT nan() { return priv::Datum_helper::nan<eT>(); }
Chris@49 52
Chris@49 53 //! infinity
Chris@49 54 static eT inf() { return priv::Datum_helper::inf<eT>(); }
Chris@49 55 };
Chris@49 56
Chris@49 57
Chris@49 58
Chris@49 59 //! Physical constants taken from NIST and WolframAlpha on 2009-06-23
Chris@49 60 //! http://physics.nist.gov/cuu/Constants
Chris@49 61 //! http://www.wolframalpha.com
Chris@49 62 //! See also http://en.wikipedia.org/wiki/Physical_constant
Chris@49 63 template<typename eT>
Chris@49 64 class Phy
Chris@49 65 {
Chris@49 66 public:
Chris@49 67
Chris@49 68 //! atomic mass constant (in kg)
Chris@49 69 static eT m_u() { return eT(1.660538782e-27); }
Chris@49 70
Chris@49 71 //! Avogadro constant
Chris@49 72 static eT N_A() { return eT(6.02214179e23); }
Chris@49 73
Chris@49 74 //! Boltzmann constant (in joules per kelvin)
Chris@49 75 static eT k() { return eT(1.3806504e-23); }
Chris@49 76
Chris@49 77 //! Boltzmann constant (in eV/K)
Chris@49 78 static eT k_evk() { return eT(8.617343e-5); }
Chris@49 79
Chris@49 80 //! Bohr radius (in meters)
Chris@49 81 static eT a_0() { return eT(0.52917720859e-10); }
Chris@49 82
Chris@49 83 //! Bohr magneton
Chris@49 84 static eT mu_B() { return eT(927.400915e-26); }
Chris@49 85
Chris@49 86 //! characteristic impedance of vacuum (in ohms)
Chris@49 87 static eT Z_0() { return eT(3.76730313461771e-2); }
Chris@49 88
Chris@49 89 //! conductance quantum (in siemens)
Chris@49 90 static eT G_0() { return eT(7.7480917004e-5); }
Chris@49 91
Chris@49 92 //! Coulomb's constant (in meters per farad)
Chris@49 93 static eT k_e() { return eT(8.9875517873681764e9); }
Chris@49 94
Chris@49 95 //! electric constant (in farads per meter)
Chris@49 96 static eT eps_0() { return eT(8.85418781762039e-12); }
Chris@49 97
Chris@49 98 //! electron mass (in kg)
Chris@49 99 static eT m_e() { return eT(9.10938215e-31); }
Chris@49 100
Chris@49 101 //! electron volt (in joules)
Chris@49 102 static eT eV() { return eT(1.602176487e-19); }
Chris@49 103
Chris@49 104 //! elementary charge (in coulombs)
Chris@49 105 static eT e() { return eT(1.602176487e-19); }
Chris@49 106
Chris@49 107 //! Faraday constant (in coulombs)
Chris@49 108 static eT F() { return eT(96485.3399); }
Chris@49 109
Chris@49 110 //! fine-structure constant
Chris@49 111 static eT alpha() { return eT(7.2973525376e-3); }
Chris@49 112
Chris@49 113 //! inverse fine-structure constant
Chris@49 114 static eT alpha_inv() { return eT(137.035999679); }
Chris@49 115
Chris@49 116 //! Josephson constant
Chris@49 117 static eT K_J() { return eT(483597.891e9); }
Chris@49 118
Chris@49 119 //! magnetic constant (in henries per meter)
Chris@49 120 static eT mu_0() { return eT(1.25663706143592e-06); }
Chris@49 121
Chris@49 122 //! magnetic flux quantum (in webers)
Chris@49 123 static eT phi_0() { return eT(2.067833667e-15); }
Chris@49 124
Chris@49 125 //! molar gas constant (in joules per mole kelvin)
Chris@49 126 static eT R() { return eT(8.314472); }
Chris@49 127
Chris@49 128 //! Newtonian constant of gravitation (in newton square meters per kilogram squared)
Chris@49 129 static eT G() { return eT(6.67428e-11); }
Chris@49 130
Chris@49 131 //! Planck constant (in joule seconds)
Chris@49 132 static eT h() { return eT(6.62606896e-34); }
Chris@49 133
Chris@49 134 //! Planck constant over 2 pi, aka reduced Planck constant (in joule seconds)
Chris@49 135 static eT h_bar() { return eT(1.054571628e-34); }
Chris@49 136
Chris@49 137 //! proton mass (in kg)
Chris@49 138 static eT m_p() { return eT(1.672621637e-27); }
Chris@49 139
Chris@49 140 //! Rydberg constant (in reciprocal meters)
Chris@49 141 static eT R_inf() { return eT(10973731.568527); }
Chris@49 142
Chris@49 143 //! speed of light in vacuum (in meters per second)
Chris@49 144 static eT c_0() { return eT(299792458.0); }
Chris@49 145
Chris@49 146 //! Stefan-Boltzmann constant
Chris@49 147 static eT sigma() { return eT(5.670400e-8); }
Chris@49 148
Chris@49 149 //! von Klitzing constant (in ohms)
Chris@49 150 static eT R_k() { return eT(25812.807557); }
Chris@49 151
Chris@49 152 //! Wien wavelength displacement law constant
Chris@49 153 static eT b() { return eT(2.8977685e-3); }
Chris@49 154 };
Chris@49 155
Chris@49 156
Chris@49 157
Chris@49 158 typedef Math<float> fmath;
Chris@49 159 typedef Math<double> math;
Chris@49 160
Chris@49 161 typedef Phy<float> fphy;
Chris@49 162 typedef Phy<double> phy;
Chris@49 163
Chris@49 164
Chris@49 165
Chris@49 166 //! @}