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