diff --git a/include/hip/hcc_detail/math_functions.h b/include/hip/hcc_detail/math_functions.h index 2cc4ef81bd..8455509732 100644 --- a/include/hip/hcc_detail/math_functions.h +++ b/include/hip/hcc_detail/math_functions.h @@ -66,7 +66,7 @@ __device__ float j0f(float x); __device__ float j1f(float x); __device__ float jnf(int n, float x); __device__ float ldexpf(float x, int exp); -//__device__ float lgammaf(float x); +__device__ float lgammaf(float x); __device__ long long int llrintf(float x); __device__ long long int llroundf(float x); __device__ float log10f(float x); diff --git a/src/math_functions.cpp b/src/math_functions.cpp index 6e919b3926..92cc8689fc 100644 --- a/src/math_functions.cpp +++ b/src/math_functions.cpp @@ -188,8 +188,12 @@ __device__ float ldexpf(float x, int exp) } __device__ float lgammaf(float x) { - int sign; - return hc::precise_math::lgammaf(x, &sign); + float val = 0.0f; + float y = x - 1; + while(y > 0){ + val += logf(y--); + } + return val; } __device__ long long int llrintf(float x) { @@ -570,8 +574,12 @@ __device__ double ldexp(double x, int exp) } __device__ double lgamma(double x) { - int sign; - return hc::precise_math::lgamma(x, &sign); + double val = 0.0; + double y = x - 1; + while(y > 0){ + val += log(y--); + } + return val; } __device__ long long int llrint(double x) {