funcy  1.6.1
cosine.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 {
19  struct Cos : Chainer< Cos >
20  {
25  explicit Cos( double x = 0. ) noexcept
26  {
27  update( x );
28  }
29 
31  void update( double x ) noexcept
32  {
33  sinx = ::sin( x );
34  cosx = ::cos( x );
35  }
36 
38  [[nodiscard]] double d0() const noexcept
39  {
40  return cosx;
41  }
42 
44  [[nodiscard]] double d1( double dx = 1. ) const noexcept
45  {
46  return -sinx * dx;
47  }
48 
50  [[nodiscard]] double d2( double dx = 1., double dy = 1. ) const noexcept
51  {
52  return -cosx * dx * dy;
53  }
54 
56  [[nodiscard]] double d3( double dx = 1., double dy = 1., double dz = 1. ) const noexcept
57  {
58  return sinx * dx * dy * dz;
59  }
60 
61  private:
62  double sinx = 0, cosx = 1;
63  };
64 
71  template < Function F >
72  [[nodiscard]] auto cos( const F& f )
73  {
74  return Cos()( f );
75  }
76 } // namespace funcy
void update(double x) noexcept
Set point of evaluation.
Definition: cosine.h:31
Cos(double x=0.) noexcept
Constructor.
Definition: cosine.h:25
Main namespace of the funcy library.
double d0() const noexcept
Function value.
Definition: cosine.h:38
auto cos(const F &f)
Generate .
Definition: cosine.h:72
double d1(double dx=1.) const noexcept
First (directional) derivative.
Definition: cosine.h:44
Cosine function (based on cos(double) in <cmath>).
Definition: cosine.h:19
auto sin(const F &f)
Generate .
Definition: sine.h:69
double d2(double dx=1., double dy=1.) const noexcept
Second (directional) derivative.
Definition: cosine.h:50
double d3(double dx=1., double dy=1., double dz=1.) const noexcept
Third (directional) derivative.
Definition: cosine.h:56