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