Fuzzy.h
Go to the documentation of this file.
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
5 // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
6 //
7 // This Source Code Form is subject to the terms of the Mozilla
8 // Public License v. 2.0. If a copy of the MPL was not distributed
9 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 
11 #ifndef EIGEN_FUZZY_H
12 #define EIGEN_FUZZY_H
13 
14 namespace Eigen {
15 
16 namespace internal
17 {
18 
19 template<typename Derived, typename OtherDerived, bool is_integer = NumTraits<typename Derived::Scalar>::IsInteger>
21 {
22  EIGEN_DEVICE_FUNC
23  static bool run(const Derived& x, const OtherDerived& y, const typename Derived::RealScalar& prec)
24  {
26  typename internal::nested_eval<OtherDerived,2>::type otherNested(y);
27  return (nested - otherNested).cwiseAbs2().sum() <= prec * prec * numext::mini(nested.cwiseAbs2().sum(), otherNested.cwiseAbs2().sum());
28  }
29 };
30 
31 template<typename Derived, typename OtherDerived>
32 struct isApprox_selector<Derived, OtherDerived, true>
33 {
34  EIGEN_DEVICE_FUNC
35  static bool run(const Derived& x, const OtherDerived& y, const typename Derived::RealScalar&)
36  {
37  return x.matrix() == y.matrix();
38  }
39 };
40 
41 template<typename Derived, typename OtherDerived, bool is_integer = NumTraits<typename Derived::Scalar>::IsInteger>
43 {
44  EIGEN_DEVICE_FUNC
45  static bool run(const Derived& x, const OtherDerived& y, const typename Derived::RealScalar& prec)
46  {
47  return x.cwiseAbs2().sum() <= numext::abs2(prec) * y.cwiseAbs2().sum();
48  }
49 };
50 
51 template<typename Derived, typename OtherDerived>
52 struct isMuchSmallerThan_object_selector<Derived, OtherDerived, true>
53 {
54  EIGEN_DEVICE_FUNC
55  static bool run(const Derived& x, const OtherDerived&, const typename Derived::RealScalar&)
56  {
57  return x.matrix() == Derived::Zero(x.rows(), x.cols()).matrix();
58  }
59 };
60 
61 template<typename Derived, bool is_integer = NumTraits<typename Derived::Scalar>::IsInteger>
63 {
64  EIGEN_DEVICE_FUNC
65  static bool run(const Derived& x, const typename Derived::RealScalar& y, const typename Derived::RealScalar& prec)
66  {
67  return x.cwiseAbs2().sum() <= numext::abs2(prec * y);
68  }
69 };
70 
71 template<typename Derived>
72 struct isMuchSmallerThan_scalar_selector<Derived, true>
73 {
74  EIGEN_DEVICE_FUNC
75  static bool run(const Derived& x, const typename Derived::RealScalar&, const typename Derived::RealScalar&)
76  {
77  return x.matrix() == Derived::Zero(x.rows(), x.cols()).matrix();
78  }
79 };
80 
81 } // end namespace internal
82 
83 
101 template<typename Derived>
102 template<typename OtherDerived>
104  const DenseBase<OtherDerived>& other,
105  const RealScalar& prec
106 ) const
107 {
108  return internal::isApprox_selector<Derived, OtherDerived>::run(derived(), other.derived(), prec);
109 }
110 
124 template<typename Derived>
126  const typename NumTraits<Scalar>::Real& other,
127  const RealScalar& prec
128 ) const
129 {
130  return internal::isMuchSmallerThan_scalar_selector<Derived>::run(derived(), other, prec);
131 }
132 
143 template<typename Derived>
144 template<typename OtherDerived>
146  const DenseBase<OtherDerived>& other,
147  const RealScalar& prec
148 ) const
149 {
150  return internal::isMuchSmallerThan_object_selector<Derived, OtherDerived>::run(derived(), other.derived(), prec);
151 }
152 
153 } // end namespace Eigen
154 
155 #endif // EIGEN_FUZZY_H
EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const RealScalar &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Namespace containing all symbols from the Eigen library.
Definition: jet.h:637
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
Definition: NumTraits.h:150
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:41
static EIGEN_DEVICE_FUNC bool run(const Derived &x, const typename Derived::RealScalar &, const typename Derived::RealScalar &)
Definition: Fuzzy.h:75
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:34
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Abs2ReturnType abs2() const
static EIGEN_DEVICE_FUNC bool run(const Derived &x, const OtherDerived &, const typename Derived::RealScalar &)
Definition: Fuzzy.h:55
static EIGEN_DEVICE_FUNC bool run(const Derived &x, const typename Derived::RealScalar &y, const typename Derived::RealScalar &prec)
Definition: Fuzzy.h:65
NumTraits< Scalar >::Real RealScalar
Definition: DenseBase.h:73
EIGEN_DEVICE_FUNC bool isApprox(const DenseBase< OtherDerived > &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
static EIGEN_DEVICE_FUNC bool run(const Derived &x, const OtherDerived &y, const typename Derived::RealScalar &prec)
Definition: Fuzzy.h:45
static EIGEN_DEVICE_FUNC bool run(const Derived &x, const OtherDerived &y, const typename Derived::RealScalar &)
Definition: Fuzzy.h:35
static EIGEN_DEVICE_FUNC bool run(const Derived &x, const OtherDerived &y, const typename Derived::RealScalar &prec)
Definition: Fuzzy.h:23
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:42:05