MVE - Multi-View Environment mve-devel
Loading...
Searching...
No Matches
defines.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2015, Simon Fuhrmann
3 * TU Darmstadt - Graphics, Capture and Massively Parallel Computing
4 * All rights reserved.
5 *
6 * This software may be modified and distributed under the terms
7 * of the BSD 3-Clause license. See the LICENSE.txt file for details.
8 */
9
10#ifndef MATH_DEFINES_HEADER
11#define MATH_DEFINES_HEADER
12
13#include <limits>
14
15#define MATH_NAMESPACE_BEGIN namespace math {
16#define MATH_NAMESPACE_END }
17
18#define MATH_ALGO_NAMESPACE_BEGIN namespace algo {
19#define MATH_ALGO_NAMESPACE_END }
20
21#define MATH_GEOM_NAMESPACE_BEGIN namespace geom {
22#define MATH_GEOM_NAMESPACE_END }
23
24#define MATH_INTERNAL_NAMESPACE_BEGIN namespace internal {
25#define MATH_INTERNAL_NAMESPACE_END }
26
36
37/*
38 * Some constants. Note that M_xx is not available everywhere.
39 * These constants are computed with the high precision calculator at
40 * http://keisan.casio.com/calculator set to 38 digits.
41 */
42#define MATH_PI 3.14159265358979323846264338327950288 // pi
43#define MATH_PI_2 1.57079632679489661923132169163975144 // pi/2
44#define MATH_PI_4 0.785398163397448309615660845819875721 // pi/4
45#define MATH_1_PI 0.318309886183790671537767526745028724 // 1/pi
46#define MATH_2_PI 0.636619772367581343075535053490057448 // 2/pi
47#define MATH_TAU 6.283185307179586476925286766559005768 // 2*pi
48
49#define MATH_SQRT2 1.41421356237309504880168872420969808 // sqrt(2)
50#define MATH_SQRT3 1.7320508075688772935274463415058723669 // sqrt(3)
51#define MATH_1_SQRT_2 0.707106781186547524400844362104849039 // 1/sqrt(2)
52#define MATH_2_SQRT_PI 1.12837916709551257389615890312154517 // 2/sqrt(pi)
53#define MATH_SQRT_PI 1.7724538509055160272981674833411451828 // sqrt(pi)
54#define MATH_SQRT_2PI 2.506628274631000502415765284811045253 // sqrt(2*pi)
55
56#define MATH_E 2.71828182845904523536028747135266250 // e
57#define MATH_LOG2E 1.44269504088896340735992468100189214 // log_2(e)
58#define MATH_LOG10E 0.434294481903251827651128918916605082 // log_10(e)
59#define MATH_LOG102 0.301029995663981195213738894724493026 // log_10(2)
60#define MATH_LN2 0.693147180559945309417232121458176568 // log_e(2)
61#define MATH_LN10 2.30258509299404568401799145468436421 // log_e(10)
62
63/* Infinity values. Consider using +/-FLT_MAX, or +/-DBL_MAX. */
64#define MATH_POS_INF (std::numeric_limits<double>::infinity())
65#define MATH_NEG_INF (-MATH_POS_INF)
66
67/* Fast power macros. */
68#define MATH_POW2(x) ((x) * (x))
69#define MATH_POW3(x) (MATH_POW2(x) * (x))
70#define MATH_POW4(x) (MATH_POW2(MATH_POW2(x)))
71#define MATH_POW5(x) (MATH_POW4(x) * (x))
72#define MATH_POW6(x) (MATH_POW3(MATH_POW2(x)))
73#define MATH_POW7(x) (MATH_POW6(x) * (x))
74#define MATH_POW8(x) (MATH_POW4(MATH_POW2(x)))
75
76/* Angle conversions macros, DEG <-> RAD. */
77#define MATH_RAD2DEG(x) ((x) * (180.0 / MATH_PI))
78#define MATH_DEG2RAD(x) ((x) * (MATH_PI / 180.0))
79
80/* Float and double limits and epsilon values. */
81#ifndef __FLT_MIN__
82# define __FLT_MIN__ 1.17549435e-38f
83#endif
84#ifndef __DBL_MIN__
85# define __DBL_MIN__ 2.2250738585072014e-308
86#endif
87#define MATH_FLT_MIN __FLT_MIN__
88#define MATH_DBL_MIN __DBL_MIN__
89#define MATH_FLT_EPS (MATH_FLT_MIN * 1e8f) // approx. 1.17e-30
90#define MATH_DBL_EPS (MATH_DBL_MIN * 1e58) // approx. 2.22e-250
91
92/* Misc operations. */
93#define MATH_SIGN(x) ((x) < 0 ? -1 : 1)
94
95/* Floating-point epsilon comparisons. */
96#define MATH_EPSILON_EQ(x,v,eps) (((v - eps) <= x) && (x <= (v + eps)))
97#define MATH_EPSILON_LESS(x,v,eps) ((x + eps) < v)
98#define MATH_FLOAT_EQ(x,v) MATH_EPSILON_EQ(x,v,MATH_FLT_EPS)
99#define MATH_DOUBLE_EQ(x,v) MATH_EPSILON_EQ(x,v,MATH_DBL_EPS)
100#define MATH_FLOAT_LESS(x,v) MATH_EPSILON_LESS(x,v,MATH_FLT_EPS)
101#define MATH_DOUBLE_LESS(x,v) MATH_EPSILON_LESS(x,v,MATH_DBL_EPS)
102
103/* NAN and INF checks. */
104#define MATH_ISNAN(x) (x != x)
105#define MATH_ISINF(x) (!MATH_ISNAN(x) && MATH_ISNAN(x - x))
106#define MATH_NAN_CHECK(x) if (MATH_ISNAN(x)) { \
107 std::cout << "NAN error in " << __FILE__ << ":" << __LINE__ << std::endl; }
108
109/* Max std::size_t value. */
110#define MATH_MAX_SIZE_T ((std::size_t)-1)
111#define MATH_MAX_UINT ((unsigned int)-1)
112
113#endif /* MATH_DEFINES_HEADER */
#define MATH_INTERNAL_NAMESPACE_BEGIN
Definition defines.h:24
#define MATH_GEOM_NAMESPACE_BEGIN
Definition defines.h:21
#define MATH_NAMESPACE_BEGIN
Definition defines.h:15
#define MATH_NAMESPACE_END
Definition defines.h:16
#define MATH_INTERNAL_NAMESPACE_END
Definition defines.h:25
#define MATH_ALGO_NAMESPACE_BEGIN
Definition defines.h:18
#define MATH_GEOM_NAMESPACE_END
Definition defines.h:22
#define MATH_ALGO_NAMESPACE_END
Definition defines.h:19