ClickHouse
33 строки · 614.0 Байт
1#include <Functions/FunctionMathUnary.h>
2#include <Functions/FunctionFactory.h>
3
4#if defined(OS_DARWIN)
5extern "C"
6{
7double lgamma_r(double x, int * signgamp);
8}
9#endif
10
11namespace DB
12{
13namespace
14{
15
16/// Use wrapper and use lgamma_r version because std::lgamma is not threadsafe.
17Float64 lgamma_wrapper(Float64 arg)
18{
19int signp;
20return lgamma_r(arg, &signp);
21}
22
23struct LGammaName { static constexpr auto name = "lgamma"; };
24using FunctionLGamma = FunctionMathUnary<UnaryFunctionVectorized<LGammaName, lgamma_wrapper>>;
25
26}
27
28REGISTER_FUNCTION(LGamma)
29{
30factory.registerFunction<FunctionLGamma>();
31}
32
33}
34