OpenShot Audio Library | OpenShotAudio  0.6.0
juce_FastMathApproximations.h
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2022 - Raw Material Software Limited
6 
7  JUCE is an open source library subject to commercial or open-source
8  licensing.
9 
10  By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11  Agreement and JUCE Privacy Policy.
12 
13  End User License Agreement: www.juce.com/juce-7-licence
14  Privacy Policy: www.juce.com/juce-privacy-policy
15 
16  Or: You may also use this code under the terms of the GPL v3 (see
17  www.gnu.org/licenses).
18 
19  JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20  EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21  DISCLAIMED.
22 
23  ==============================================================================
24 */
25 
26 namespace juce::dsp
27 {
28 
35 {
42  template <typename FloatType>
43  static FloatType cosh (FloatType x) noexcept
44  {
45  auto x2 = x * x;
46  auto numerator = -(39251520 + x2 * (18471600 + x2 * (1075032 + 14615 * x2)));
47  auto denominator = -39251520 + x2 * (1154160 + x2 * (-16632 + 127 * x2));
48  return numerator / denominator;
49  }
50 
57  template <typename FloatType>
58  static void cosh (FloatType* values, size_t numValues) noexcept
59  {
60  for (size_t i = 0; i < numValues; ++i)
61  values[i] = FastMathApproximations::cosh (values[i]);
62  }
63 
70  template <typename FloatType>
71  static FloatType sinh (FloatType x) noexcept
72  {
73  auto x2 = x * x;
74  auto numerator = -x * (11511339840 + x2 * (1640635920 + x2 * (52785432 + x2 * 479249)));
75  auto denominator = -11511339840 + x2 * (277920720 + x2 * (-3177720 + x2 * 18361));
76  return numerator / denominator;
77  }
78 
85  template <typename FloatType>
86  static void sinh (FloatType* values, size_t numValues) noexcept
87  {
88  for (size_t i = 0; i < numValues; ++i)
89  values[i] = FastMathApproximations::sinh (values[i]);
90  }
91 
98  template <typename FloatType>
99  static FloatType tanh (FloatType x) noexcept
100  {
101  auto x2 = x * x;
102  auto numerator = x * (135135 + x2 * (17325 + x2 * (378 + x2)));
103  auto denominator = 135135 + x2 * (62370 + x2 * (3150 + 28 * x2));
104  return numerator / denominator;
105  }
106 
113  template <typename FloatType>
114  static void tanh (FloatType* values, size_t numValues) noexcept
115  {
116  for (size_t i = 0; i < numValues; ++i)
117  values[i] = FastMathApproximations::tanh (values[i]);
118  }
119 
120  //==============================================================================
127  template <typename FloatType>
128  static FloatType cos (FloatType x) noexcept
129  {
130  auto x2 = x * x;
131  auto numerator = -(-39251520 + x2 * (18471600 + x2 * (-1075032 + 14615 * x2)));
132  auto denominator = 39251520 + x2 * (1154160 + x2 * (16632 + x2 * 127));
133  return numerator / denominator;
134  }
135 
142  template <typename FloatType>
143  static void cos (FloatType* values, size_t numValues) noexcept
144  {
145  for (size_t i = 0; i < numValues; ++i)
146  values[i] = FastMathApproximations::cos (values[i]);
147  }
148 
155  template <typename FloatType>
156  static FloatType sin (FloatType x) noexcept
157  {
158  auto x2 = x * x;
159  auto numerator = -x * (-11511339840 + x2 * (1640635920 + x2 * (-52785432 + x2 * 479249)));
160  auto denominator = 11511339840 + x2 * (277920720 + x2 * (3177720 + x2 * 18361));
161  return numerator / denominator;
162  }
163 
170  template <typename FloatType>
171  static void sin (FloatType* values, size_t numValues) noexcept
172  {
173  for (size_t i = 0; i < numValues; ++i)
174  values[i] = FastMathApproximations::sin (values[i]);
175  }
176 
183  template <typename FloatType>
184  static FloatType tan (FloatType x) noexcept
185  {
186  auto x2 = x * x;
187  auto numerator = x * (-135135 + x2 * (17325 + x2 * (-378 + x2)));
188  auto denominator = -135135 + x2 * (62370 + x2 * (-3150 + 28 * x2));
189  return numerator / denominator;
190  }
191 
198  template <typename FloatType>
199  static void tan (FloatType* values, size_t numValues) noexcept
200  {
201  for (size_t i = 0; i < numValues; ++i)
202  values[i] = FastMathApproximations::tan (values[i]);
203  }
204 
205  //==============================================================================
212  template <typename FloatType>
213  static FloatType exp (FloatType x) noexcept
214  {
215  auto numerator = 1680 + x * (840 + x * (180 + x * (20 + x)));
216  auto denominator = 1680 + x *(-840 + x * (180 + x * (-20 + x)));
217  return numerator / denominator;
218  }
219 
226  template <typename FloatType>
227  static void exp (FloatType* values, size_t numValues) noexcept
228  {
229  for (size_t i = 0; i < numValues; ++i)
230  values[i] = FastMathApproximations::exp (values[i]);
231  }
232 
239  template <typename FloatType>
240  static FloatType logNPlusOne (FloatType x) noexcept
241  {
242  auto numerator = x * (7560 + x * (15120 + x * (9870 + x * (2310 + x * 137))));
243  auto denominator = 7560 + x * (18900 + x * (16800 + x * (6300 + x * (900 + 30 * x))));
244  return numerator / denominator;
245  }
246 
253  template <typename FloatType>
254  static void logNPlusOne (FloatType* values, size_t numValues) noexcept
255  {
256  for (size_t i = 0; i < numValues; ++i)
257  values[i] = FastMathApproximations::logNPlusOne (values[i]);
258  }
259 };
260 
261 } // namespace juce::dsp
static void cos(FloatType *values, size_t numValues) noexcept
static FloatType tanh(FloatType x) noexcept
static void tanh(FloatType *values, size_t numValues) noexcept
static FloatType sinh(FloatType x) noexcept
static FloatType sin(FloatType x) noexcept
static FloatType logNPlusOne(FloatType x) noexcept
static void sin(FloatType *values, size_t numValues) noexcept
static FloatType exp(FloatType x) noexcept
static void logNPlusOne(FloatType *values, size_t numValues) noexcept
static FloatType cos(FloatType x) noexcept
static FloatType tan(FloatType x) noexcept
static void cosh(FloatType *values, size_t numValues) noexcept
static void sinh(FloatType *values, size_t numValues) noexcept
static void exp(FloatType *values, size_t numValues) noexcept
static FloatType cosh(FloatType x) noexcept
static void tan(FloatType *values, size_t numValues) noexcept