funcy  1.6.1
tan.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 Tan : Chainer< Tan >
21  {
23  explicit Tan( double x = 0. ) noexcept
24  {
25  update( x );
26  }
27 
29  void update( double x ) noexcept
30  {
31  value = ::tan( x );
32  firstDerivative = 1 + ( value * value );
33  }
34 
36  [[nodiscard]] double d0() const noexcept
37  {
38  return value;
39  }
40 
42  [[nodiscard]] double d1( double dx = 1. ) const noexcept
43  {
44  return firstDerivative * dx;
45  }
46 
48  [[nodiscard]] double d2( double dx = 1., double dy = 1. ) const noexcept
49  {
50  return ( 2 * value * firstDerivative ) * dx * dy;
51  }
52 
54  [[nodiscard]] double d3( double dx = 1., double dy = 1., double dz = 1. ) const noexcept
55  {
56  return 2 * firstDerivative * ( 1 + ( 3 * value * value ) ) * dx * dy * dz;
57  }
58 
59  private:
60  double value = 0., firstDerivative = 1.;
61  };
62 
68  template < Function F >
69  [[nodiscard]] auto tan( const F& f )
70  {
71  return Tan()( f );
72  }
74 } // namespace funcy
double d3(double dx=1., double dy=1., double dz=1.) const noexcept
Third (directional) derivative.
Definition: tan.h:54
double d0() const noexcept
Function value.
Definition: tan.h:36
double d1(double dx=1.) const noexcept
First (directional) derivative.
Definition: tan.h:42
auto tan(const F &f)
Generate .
Definition: tan.h:69
void update(double x) noexcept
Set point of evaluation.
Definition: tan.h:29
Main namespace of the funcy library.
double d2(double dx=1., double dy=1.) const noexcept
Second (directional) derivative.
Definition: tan.h:48
Tangent function.
Definition: tan.h:20
Tan(double x=0.) noexcept
Constructor.
Definition: tan.h:23