ClickHouse
45 строк · 872.0 Байт
1#include <Functions/FunctionMathUnary.h>
2#include <Functions/FunctionFactory.h>
3
4namespace DB
5{
6namespace
7{
8
9struct TanhName { static constexpr auto name = "tanh"; };
10
11#if USE_FASTOPS
12
13struct Impl
14{
15static constexpr auto name = TanhName::name;
16static constexpr auto rows_per_iteration = 0;
17static constexpr bool always_returns_float64 = false;
18
19template <typename T>
20static void execute(const T * src, size_t size, T * dst)
21{
22NFastOps::Tanh<>(src, size, dst);
23}
24};
25
26using FunctionTanh = FunctionMathUnary<Impl>;
27
28#else
29
30double tanh(double x)
31{
32return 2 / (1.0 + exp(-2 * x)) - 1;
33}
34
35using FunctionTanh = FunctionMathUnary<UnaryFunctionVectorized<TanhName, tanh>>;
36#endif
37
38}
39
40REGISTER_FUNCTION(Tanh)
41{
42factory.registerFunction<FunctionTanh>({}, FunctionFactory::CaseInsensitive);
43}
44
45}
46