OpenLexocad  28.0
Precision.h
Go to the documentation of this file.
1 
7 #pragma once
8 #include <qmath.h>
9 #include <limits>
10 
11 
12 
13 #define L_RES 1.e-6
14 #define A_RES 1.e-10
15 
16 
17 namespace Geom
18 {
19 class Precision
20 {
21 public:
22  // Compare 2 points, samePoint etc, same as acsi: SPAresabs
23  static constexpr double linear_Resolution() { return L_RES; }
24  // minimal angle, parallel, same as acis: SPAresnor
25  static constexpr double angle_Resolution() { return A_RES; }
26 
27  static constexpr double tolerance() { return L_RES; }
28 
29  static constexpr double confusion() { return L_RES; }
30 
31  static constexpr double angular() { return A_RES; }
32 
33 
34 
35  static constexpr double infinite() { return std::numeric_limits<double>::infinity(); }
36 
39  static constexpr double shape_infinite() { return 1E06; }
40 
41  // Note:
42  // If you want to use the std::numeric_limits min/max feature,
43  // you need to undefine the symbols named min and max first.
44  // These macros probably come from the windows.h.
45  // (tp) 20111213
46 
47  static constexpr double min_double()
48  {
49  // return std::numeric_limits<double>::min();
50  return DBL_MIN;
51  }
52 
53  static constexpr double max_double()
54  {
55  // return std::numeric_limits<double>::max();
56  return DBL_MAX;
57  }
58 
63  static constexpr double epsilon() { return std::numeric_limits<double>::epsilon(); }
64 
70  static constexpr double epsilon(double v)
71  {
72  if (v >= 0.0)
73  return std::nextafter(v, max_double()) - v;
74  else
75  return v - std::nextafter(v, min_double());
76  }
77 };
78 
79 
80 } // namespace Geom
Geom::Precision
Definition: Precision.h:20
Geom::Precision::max_double
static constexpr double max_double()
Definition: Precision.h:53
Geom::Precision::epsilon
static constexpr double epsilon()
Definition: Precision.h:63
Geom::Precision::confusion
static constexpr double confusion()
Definition: Precision.h:29
A_RES
#define A_RES
Definition: Precision.h:14
Geom::Precision::infinite
static constexpr double infinite()
Definition: Precision.h:35
Geom::Precision::shape_infinite
static constexpr double shape_infinite()
Definition: Precision.h:39
Geom::Precision::min_double
static constexpr double min_double()
Definition: Precision.h:47
Geom::Precision::angular
static constexpr double angular()
Definition: Precision.h:31
Geom::Precision::tolerance
static constexpr double tolerance()
Definition: Precision.h:27
Geom::Precision::epsilon
static constexpr double epsilon(double v)
Definition: Precision.h:70
L_RES
#define L_RES
Definition: Precision.h:13
Geom::Precision::linear_Resolution
static constexpr double linear_Resolution()
Definition: Precision.h:23
Geom::Precision::angle_Resolution
static constexpr double angle_Resolution()
Definition: Precision.h:25
Geom
Definition: PropertyContainer.h:33