]> Dogcows Code - chaz/yoink/blob - src/Moof/cml/constants.h
extreme refactoring
[chaz/yoink] / src / Moof / cml / constants.h
1 /* -*- C++ -*- ------------------------------------------------------------
2
3 Copyright (c) 2007 Jesse Anders and Demian Nave http://cmldev.net/
4
5 The Configurable Math Library (CML) is distributed under the terms of the
6 Boost Software License, v1.0 (see cml/LICENSE for details).
7
8 *-----------------------------------------------------------------------*/
9 /** @file
10 * @brief Useful constants.
11 */
12
13 #ifndef cml_constants_h
14 #define cml_constants_h
15
16 #include <cmath>
17
18 #if !defined(M_PI)
19 #define M_PI 3.14159265358979323846264338327950288
20 #endif
21
22 #if !defined(M_SQRT2)
23 #define M_SQRT2 1.41421356237309504880168872420969808
24 #endif
25
26 #if !defined(M_E)
27 #define M_E 2.71828182845904523536028747135266250
28 #endif
29
30 namespace cml {
31
32 #if 1
33
34 /** Templated constants struct.
35 *
36 * Either float or double can be used.
37 */
38 template<typename Float>
39 struct constants {
40 static Float pi() { return M_PI; }
41 static Float two_pi() { return 2.*M_PI; }
42 static Float inv_pi() { return 1./M_PI; }
43 static Float inv_two_pi() { return 1./(2.*M_PI); }
44 static Float pi_over_2() { return M_PI/2.; }
45 static Float pi_over_4() { return M_PI/4.; }
46 static Float deg_per_rad() { return 180./M_PI; }
47 static Float rad_per_deg() { return M_PI/180.; }
48 static Float sqrt_2() { return M_SQRT2; }
49 static Float sqrt_3() { return 1.732050807568877293527446341505; }
50 static Float sqrt_5() { return 2.236067977499789696409173668731; }
51 static Float sqrt_6() { return 2.449489742783178098197284074705; }
52 static Float e() { return M_E; }
53 };
54
55 #else
56
57 /* XXX This version requires an explicit instantiation of *every* constant
58 * below, e.g.:
59 *
60 * template<typename F> const F cml::constants<F>::pi;
61 */
62 /** Templated constants struct.
63 *
64 * Either float or double can be used.
65 */
66 template<typename Float>
67 struct constants {
68 static const Float pi = M_PI;
69 static const Float two_pi = 2.*M_PI;
70 static const Float inv_pi = 1./M_PI; /* 1/pi */
71 static const Float inv_two_pi = 1./(2.*M_PI); /* 1/(2*pi) */
72 static const Float pi_over_2 = M_PI/2.; /* pi/2 */
73 static const Float pi_over_4 = M_PI/4.; /* pi/4 */
74 static const Float deg_per_rad = 180./M_PI;
75 static const Float rad_per_deg = M_PI/180.;
76 static const Float sqrt_2 = M_SQRT2;
77 static const Float sqrt_3 = 1.73205080756887729352744634150587237;
78 static const Float sqrt_5 = 2.23606797749978969640917366873127624;
79 static const Float sqrt_6 = 2.44948974278317809819728407470589139;
80 static const Float e = M_E;
81 };
82
83 #endif
84
85 } // namespace cml
86
87 #endif
This page took 0.03156 seconds and 4 git commands to generate.