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 {
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 {
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 {
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 {
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 {
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 {
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>
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>
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
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:232
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:47
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
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
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:976
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
Definition: Fuzzy.h:103
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
Generic expression where a coefficient-wise unary operator is applied to an expression.
Definition: CwiseUnaryOp.h:55
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
EIGEN_DEVICE_FUNC bool abs2(bool x)
EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const RealScalar &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const


gtsam
Author(s):
autogenerated on Tue Jul 4 2023 02:34:15