funcy  1.6.1
exp.h
1 #pragma once
2 
3 #include <funcy/concepts.h>
4 #include <funcy/util/chainer.h>
5 
6 #include <cmath>
7 
8 namespace funcy
9 {
20  struct Exp : Chainer< Exp >
21  {
23  explicit Exp( double x = 0. ) noexcept
24  {
25  update( x );
26  }
27 
29  void update( double x ) noexcept
30  {
31  e_x = ::exp( x );
32  }
33 
35  [[nodiscard]] double d0() const noexcept
36  {
37  return e_x;
38  }
39 
41  [[nodiscard]] double d1( double dx = 1. ) const noexcept
42  {
43  return e_x * dx;
44  }
45 
47  [[nodiscard]] double d2( double dx = 1., double dy = 1. ) const noexcept
48  {
49  return e_x * dx * dy;
50  }
51 
53  [[nodiscard]] double d3( double dx = 1., double dy = 1., double dz = 1. ) const noexcept
54  {
55  return e_x * dx * dy * dz;
56  }
57 
58  private:
59  double e_x = 1.;
60  };
61 
69  struct Exp2 : Chainer< Exp2 >
70  {
72  explicit Exp2( double x = 0. ) noexcept
73  {
74  update( x );
75  }
76 
78  void update( double x ) noexcept
79  {
80  value = exp2( x );
81  }
82 
84  [[nodiscard]] double d0() const noexcept
85  {
86  return value;
87  }
88 
90  [[nodiscard]] double d1( double dx = 1. ) const noexcept
91  {
92  return value * ln2 * dx;
93  }
94 
96  [[nodiscard]] double d2( double dx = 1., double dy = 1. ) const noexcept
97  {
98  return value * ln2 * ln2 * dx * dy;
99  }
100 
102  [[nodiscard]] double d3( double dx = 1., double dy = 1., double dz = 1. ) const noexcept
103  {
104  return value * ln2 * ln2 * ln2 * dx * dy * dz;
105  }
106 
107  private:
108  double value = 1., ln2 = log( 2. );
109  };
110 
116  template < Function F >
117  [[nodiscard]] auto exp( const F& f )
118  {
119  return Exp()( f );
120  }
121 
127  template < Function F >
128  [[nodiscard]] auto exp2( const F& f )
129  {
130  return Exp2()( f );
131  }
133 } // namespace funcy
auto exp2(const F &f)
Generate .
Definition: exp.h:128
double d0() const noexcept
Function value.
Definition: exp.h:84
void update(double x) noexcept
Set point of evaluation.
Definition: exp.h:29
double d2(double dx=1., double dy=1.) const noexcept
Second (directional) derivative.
Definition: exp.h:96
auto exp(const F &f)
Generate .
Definition: exp.h:117
double d3(double dx=1., double dy=1., double dz=1.) const noexcept
Third (directional) derivative.
Definition: exp.h:102
double d1(double dx=1.) const noexcept
First (directional) derivative.
Definition: exp.h:90
Main namespace of the funcy library.
double d2(double dx=1., double dy=1.) const noexcept
Function value.
Definition: exp.h:47
Function .
Definition: exp.h:69
Exp2(double x=0.) noexcept
Constructor.
Definition: exp.h:72
double d3(double dx=1., double dy=1., double dz=1.) const noexcept
Function value.
Definition: exp.h:53
double d0() const noexcept
Function value.
Definition: exp.h:35
void update(double x) noexcept
Set point of evaluation.
Definition: exp.h:78
Exp(double x=0.) noexcept
Function value.
Definition: exp.h:23
Exponential function.
Definition: exp.h:20
double d1(double dx=1.) const noexcept
Function value.
Definition: exp.h:41