added bessel zero and one order functions
Change-Id: I57039d54eae7207db00415bc7ba09bbf9cb6425a
Этот коммит содержится в:
коммит произвёл
Maneesh Gupta
родитель
90d67c5adf
Коммит
ec48e50101
@@ -137,6 +137,473 @@ __device__ double __hip_erfinv(double x){
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define __hip_j0a1 57568490574.0
|
||||
#define __hip_j0a2 -13362590354.0
|
||||
#define __hip_j0a3 651619640.7
|
||||
#define __hip_j0a4 -11214424.18
|
||||
#define __hip_j0a5 77392.33017
|
||||
#define __hip_j0a6 -184.9052456
|
||||
|
||||
#define __hip_j0b1 57568490411.0
|
||||
#define __hip_j0b2 1029532985.0
|
||||
#define __hip_j0b3 9494680.718
|
||||
#define __hip_j0b4 59272.64853
|
||||
#define __hip_j0b5 267.8532712
|
||||
|
||||
#define __hip_j0c 0.785398164
|
||||
#define __hip_j0c1 -0.1098628627e-2
|
||||
#define __hip_j0c2 0.2734510407e-4
|
||||
#define __hip_j0c3 -0.2073370639e-5
|
||||
#define __hip_j0c4 0.2093887211e-6
|
||||
|
||||
#define __hip_j0d1 -0.1562499995e-1
|
||||
#define __hip_j0d2 0.1430488765e-3
|
||||
#define __hip_j0d3 0.6911147651e-5
|
||||
#define __hip_j0d4 0.7621095161e-6
|
||||
#define __hip_j0d5 0.934935152e-7
|
||||
|
||||
#define __hip_j0e 0.636619772
|
||||
|
||||
__device__ double __hip_j0(double x)
|
||||
{
|
||||
double ret, a = hc::precise_math::fabs(x);
|
||||
if (a < 8.0) {
|
||||
double y = x*x;
|
||||
double y1 = __hip_j0a6 * y + __hip_j0a5;
|
||||
double z1 = 1.0 * y + __hip_j0b5;
|
||||
|
||||
double y2 = y1 * y + __hip_j0a4;
|
||||
double z2 = z1 * y + __hip_j0b4;
|
||||
|
||||
double y3 = y2 * y + __hip_j0a3;
|
||||
double z3 = z2 * y + __hip_j0b3;
|
||||
|
||||
double y4 = y3 * y + __hip_j0a2;
|
||||
double z4 = z3 * y + __hip_j0b2;
|
||||
|
||||
double y5 = y4 * y + __hip_j0a1;
|
||||
double z5 = z4 * y + __hip_j0b1;
|
||||
|
||||
ret = y5 / z5;
|
||||
|
||||
}
|
||||
else {
|
||||
double z = 8.0 / a;
|
||||
double y = z*z;
|
||||
double x1 = a - __hip_j0c;
|
||||
|
||||
double y1 = __hip_j0c4 * y + __hip_j0c3;
|
||||
double z1 = __hip_j0d5 * y + __hip_j0d4;
|
||||
|
||||
double y2 = y1 * y + __hip_j0c2;
|
||||
double z2 = z1 * z + __hip_j0d3;
|
||||
|
||||
double y3 = y2 * y + __hip_j0c1;
|
||||
double z3 = z2 * y + __hip_j0d2;
|
||||
|
||||
double y4 = y3 * y + 1.0;
|
||||
double z4 = z3 * y + __hip_j0d1;
|
||||
|
||||
ret = hc::precise_math::sqrt(__hip_j0e / a)*(hc::precise_math::cos(x1) * y4 - z * hc::precise_math::sin(x1) * z4);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
__device__ float __hip_j0f(float x)
|
||||
{
|
||||
float ret, a = hc::precise_math::fabsf(x);
|
||||
if (a < 8.0) {
|
||||
float y = x*x;
|
||||
float y1 = __hip_j0a6 * y + __hip_j0a5;
|
||||
float z1 = 1.0 * y + __hip_j0b5;
|
||||
|
||||
float y2 = y1 * y + __hip_j0a4;
|
||||
float z2 = z1 * y + __hip_j0b4;
|
||||
|
||||
float y3 = y2 * y + __hip_j0a3;
|
||||
float z3 = z2 * y + __hip_j0b3;
|
||||
|
||||
float y4 = y3 * y + __hip_j0a2;
|
||||
float z4 = z3 * y + __hip_j0b2;
|
||||
|
||||
float y5 = y4 * y + __hip_j0a1;
|
||||
float z5 = z4 * y + __hip_j0b1;
|
||||
|
||||
ret = y5 / z5;
|
||||
|
||||
}
|
||||
else {
|
||||
float z = 8.0 / a;
|
||||
float y = z*z;
|
||||
float x1 = a - __hip_j0c;
|
||||
|
||||
float y1 = __hip_j0c4 * y + __hip_j0c3;
|
||||
float z1 = __hip_j0d5 * y + __hip_j0d4;
|
||||
|
||||
float y2 = y1 * y + __hip_j0c2;
|
||||
float z2 = z1 * z + __hip_j0d3;
|
||||
|
||||
float y3 = y2 * y + __hip_j0c1;
|
||||
float z3 = z2 * y + __hip_j0d2;
|
||||
|
||||
float y4 = y3 * y + 1.0;
|
||||
float z4 = z3 * y + __hip_j0d1;
|
||||
|
||||
ret = hc::precise_math::sqrtf(__hip_j0e / a)*(hc::precise_math::cosf(x1) * y4 - z * hc::precise_math::sinf(x1) * z4);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define __hip_j1a1 -30.16036606
|
||||
#define __hip_j1a2 15704.48260
|
||||
#define __hip_j1a3 -2972611.439
|
||||
#define __hip_j1a4 242396853.1
|
||||
#define __hip_j1a5 -7895059235.0
|
||||
#define __hip_j1a6 72362614232.0
|
||||
|
||||
#define __hip_j1b1 376.9991397
|
||||
#define __hip_j1b2 99447.43394
|
||||
#define __hip_j1b3 18583304.74
|
||||
#define __hip_j1b4 2300535178.0
|
||||
#define __hip_j1b5 144725228442.0
|
||||
|
||||
#define __hip_j1c 2.356194491
|
||||
#define __hip_j1c1 -0.240337019e-6
|
||||
#define __hip_j1c2 0.2457520174e-5
|
||||
#define __hip_j1c3 -0.3516396496e-4
|
||||
#define __hip_j1c4 0.183105e-2
|
||||
|
||||
#define __hip_j1d1 0.105787412e-6
|
||||
#define __hip_j1d2 -0.88228987e-6
|
||||
#define __hip_j1d3 0.8449199096e-5
|
||||
#define __hip_j1d4 -0.2002690873e-3
|
||||
#define __hip_j1d5 0.04687499995
|
||||
|
||||
#define __hip_j1e 0.636619772
|
||||
|
||||
__device__ double __hip_j1(double x)
|
||||
{
|
||||
double ret, a = hc::precise_math::fabs(x);
|
||||
if (a < 8.0) {
|
||||
double y = x*x;
|
||||
|
||||
double y1 = __hip_j1a1 * y + __hip_j1a2;
|
||||
double z1 = 1.0 * y + __hip_j1b1;
|
||||
|
||||
double y2 = y1 * y + __hip_j1a3;
|
||||
double z2 = z1 * y + __hip_j1b2;
|
||||
|
||||
double y3 = y2 * y + __hip_j1a4;
|
||||
double z3 = z2 * y + __hip_j1b3;
|
||||
|
||||
double y4 = y3 * y + __hip_j1a5;
|
||||
double z4 = z3 * y + __hip_j1b4;
|
||||
|
||||
double y5 = y4 * y + __hip_j1a6;
|
||||
double z5 = z4 * y + __hip_j1b5;
|
||||
|
||||
ret = x * y5 / z5;
|
||||
|
||||
}
|
||||
else {
|
||||
double z = 8.0 / a;
|
||||
double y = z*z;
|
||||
double x1 = a - __hip_j1c;
|
||||
|
||||
double y1 = __hip_j1c1 * y + __hip_j1c2;
|
||||
double y2 = y1 * y + __hip_j1c3;
|
||||
double y3 = y2 * y + __hip_j1c4;
|
||||
double y4 = y3 * y + 1.0;
|
||||
|
||||
double z1 = __hip_j1d1 * y + __hip_j1d2;
|
||||
double z2 = z1 * y + __hip_j1d3;
|
||||
double z3 = z2 * y + __hip_j1d4;
|
||||
double z4 = z3 * y + __hip_j1d5;
|
||||
|
||||
ret = hc::precise_math::sqrt(__hip_j1e / a)*(hc::precise_math::cos(x1)*y4 - z*hc::precise_math::sin(x1)*z4);
|
||||
if (x < 0.0) ret = -ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
__device__ float __hip_j1f(float x)
|
||||
{
|
||||
double ret, a = hc::precise_math::fabsf(x);
|
||||
if (a < 8.0) {
|
||||
float y = x*x;
|
||||
|
||||
float y1 = __hip_j1a1 * y + __hip_j1a2;
|
||||
float z1 = 1.0 * y + __hip_j1b1;
|
||||
|
||||
float y2 = y1 * y + __hip_j1a3;
|
||||
float z2 = z1 * y + __hip_j1b2;
|
||||
|
||||
float y3 = y2 * y + __hip_j1a4;
|
||||
float z3 = z2 * y + __hip_j1b3;
|
||||
|
||||
float y4 = y3 * y + __hip_j1a5;
|
||||
float z4 = z3 * y + __hip_j1b4;
|
||||
|
||||
float y5 = y4 * y + __hip_j1a6;
|
||||
float z5 = z4 * y + __hip_j1b5;
|
||||
|
||||
ret = x * y5 / z5;
|
||||
|
||||
}
|
||||
else {
|
||||
float z = 8.0 / a;
|
||||
float y = z*z;
|
||||
float x1 = a - __hip_j1c;
|
||||
|
||||
float y1 = __hip_j1c1 * y + __hip_j1c2;
|
||||
float y2 = y1 * y + __hip_j1c3;
|
||||
float y3 = y2 * y + __hip_j1c4;
|
||||
float y4 = y3 * y + 1.0;
|
||||
|
||||
float z1 = __hip_j1d1 * y + __hip_j1d2;
|
||||
float z2 = z1 * y + __hip_j1d3;
|
||||
float z3 = z2 * y + __hip_j1d4;
|
||||
float z4 = z3 * y + __hip_j1d5;
|
||||
|
||||
ret = hc::precise_math::sqrtf(__hip_j1e / a)*(hc::precise_math::cosf(x1)*y4 - z*hc::precise_math::sinf(x1)*z4);
|
||||
if (x < 0.0) ret = -ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define __hip_y0a1 228.4622733
|
||||
#define __hip_y0a2 -86327.92757
|
||||
#define __hip_y0a3 10879881.29
|
||||
#define __hip_y0a4 -512359803.6
|
||||
#define __hip_y0a5 7062834065.0
|
||||
#define __hip_y0a6 -2957821389.0
|
||||
|
||||
#define __hip_y0b1 226.1030244
|
||||
#define __hip_y0b2 47447.26470
|
||||
#define __hip_y0b3 7189466.438
|
||||
#define __hip_y0b4 745249964.8
|
||||
#define __hip_y0b5 40076544269.0
|
||||
|
||||
#define __hip_y0c 0.636619772
|
||||
|
||||
#define __hip_y0d 0.785398164
|
||||
|
||||
#define __hip_y0e1 0.2093887211e-6
|
||||
#define __hip_y0e2 -0.2073370639e-5
|
||||
#define __hip_y0e3 0.2734510407e-4
|
||||
#define __hip_y0e4 -0.1098628627e-2
|
||||
|
||||
|
||||
#define __hip_y0f1 -0.934945152e-7
|
||||
#define __hip_y0f2 0.7621095161e-6
|
||||
#define __hip_y0f3 -0.6911147651e-5
|
||||
#define __hip_y0f4 0.1430488765e-3
|
||||
#define __hip_y0f5 -0.1562499995e-1
|
||||
|
||||
#define __hip_y1g 0.636619772
|
||||
|
||||
__device__ double __hip_y0(double x)
|
||||
{
|
||||
double ret;
|
||||
|
||||
if (x < 8.0) {
|
||||
double y = x*x;
|
||||
double y1 = __hip_y0a1 * y + __hip_y0a2;
|
||||
double y2 = y1 * y + __hip_y0a3;
|
||||
double y3 = y2 * y + __hip_y0a4;
|
||||
double y4 = y3 * y + __hip_y0a5;
|
||||
double y5 = y4 * y + __hip_y0a6;
|
||||
|
||||
double z1 = 1.0 * y + __hip_y0b1;
|
||||
double z2 = z1 * y + __hip_y0b2;
|
||||
double z3 = z2 * y + __hip_y0b3;
|
||||
double z4 = z3 * y + __hip_y0b4;
|
||||
double z5 = z4 * y + __hip_y0b5;
|
||||
|
||||
|
||||
ret = (y5 / z5) + __hip_y0c * __hip_j0(x) * hc::precise_math::log(x);
|
||||
}
|
||||
else {
|
||||
double z = 8.0 / x;
|
||||
double y = z*z;
|
||||
double x1 = x - __hip_y0d;
|
||||
|
||||
double y1 = __hip_y0e1 * y + __hip_y0e2;
|
||||
double y2 = y1 * y + __hip_y0e3;
|
||||
double y3 = y2 * y + __hip_y0e4;
|
||||
double y4 = y3 * y + 1.0;
|
||||
|
||||
double z1 = __hip_y0f1 * y + __hip_y0f2;
|
||||
double z2 = z1 * y + __hip_y0f3;
|
||||
double z3 = z2 * y + __hip_y0f4;
|
||||
double z4 = z3 * y + __hip_y0f5;
|
||||
|
||||
ret = hc::precise_math::sqrt(__hip_y1g / x)*(hc::precise_math::sin(x1)*y4 + z * hc::precise_math::cos(x1) * z4);
|
||||
}
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
__device__ float __hip_y0f(float x)
|
||||
{
|
||||
float ret;
|
||||
|
||||
if (x < 8.0) {
|
||||
float y = x*x;
|
||||
float y1 = __hip_y0a1 * y + __hip_y0a2;
|
||||
float y2 = y1 * y + __hip_y0a3;
|
||||
float y3 = y2 * y + __hip_y0a4;
|
||||
float y4 = y3 * y + __hip_y0a5;
|
||||
float y5 = y4 * y + __hip_y0a6;
|
||||
|
||||
float z1 = 1.0 * y + __hip_y0b1;
|
||||
float z2 = z1 * y + __hip_y0b2;
|
||||
float z3 = z2 * y + __hip_y0b3;
|
||||
float z4 = z3 * y + __hip_y0b4;
|
||||
float z5 = z4 * y + __hip_y0b5;
|
||||
|
||||
|
||||
ret = (y5 / z5) + __hip_y0c * __hip_j0f(x) * hc::precise_math::logf(x);
|
||||
}
|
||||
else {
|
||||
float z = 8.0 / x;
|
||||
float y = z*z;
|
||||
float x1 = x - __hip_y0d;
|
||||
|
||||
float y1 = __hip_y0e1 * y + __hip_y0e2;
|
||||
float y2 = y1 * y + __hip_y0e3;
|
||||
float y3 = y2 * y + __hip_y0e4;
|
||||
float y4 = y3 * y + 1.0;
|
||||
|
||||
float z1 = __hip_y0f1 * y + __hip_y0f2;
|
||||
float z2 = z1 * y + __hip_y0f3;
|
||||
float z3 = z2 * y + __hip_y0f4;
|
||||
float z4 = z3 * y + __hip_y0f5;
|
||||
|
||||
ret = hc::precise_math::sqrtf(__hip_y1g / x)*(hc::precise_math::sinf(x1)*y4 + z * hc::precise_math::cosf(x1) * z4);
|
||||
}
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
#define __hip_y1a1 0.8511937935e4
|
||||
#define __hip_y1a2 -0.4237922726e7
|
||||
#define __hip_y1a3 0.7349264551e9
|
||||
#define __hip_y1a4 -0.5153438139e11
|
||||
#define __hip_y1a5 0.1275274390e13
|
||||
#define __hip_y1a6 -0.4900604943e13
|
||||
|
||||
#define __hip_y1b1 0.3549632885e3
|
||||
#define __hip_y1b2 0.1020426050e6
|
||||
#define __hip_y1b3 0.2245904002e8
|
||||
#define __hip_y1b4 0.3733650367e10
|
||||
#define __hip_y1b5 0.4244419664e12
|
||||
#define __hip_y1b6 0.2499580570e14
|
||||
|
||||
#define __hip_y1c 0.636619772
|
||||
|
||||
#define __hip_y1d 2.356194491
|
||||
|
||||
#define __hip_y1e1 -0.240337019e-6
|
||||
#define __hip_y1e2 0.2457520174e-5
|
||||
#define __hip_y1e3 -0.3516396496e-4
|
||||
#define __hip_y1e4 0.183105e-2
|
||||
|
||||
#define __hip_y1f1 0.105787412e-6
|
||||
#define __hip_y1f2 -0.88228987e-6
|
||||
#define __hip_y1f3 0.8449199096e-5
|
||||
#define __hip_y1f4 -0.2002690873e-3
|
||||
#define __hip_y1f5 0.04687499995
|
||||
|
||||
#define __hip_y1g 0.636619772
|
||||
|
||||
__device__ double __hip_y1(double x)
|
||||
{
|
||||
double ret;
|
||||
|
||||
if (x < 8.0) {
|
||||
double y = x*x;
|
||||
|
||||
double y1 = __hip_y1a1 * y + __hip_y1a2;
|
||||
double y2 = y1 * y + __hip_y1a3;
|
||||
double y3 = y2 * y + __hip_y1a4;
|
||||
double y4 = y3 * y + __hip_y1a5;
|
||||
double y5 = y4 * y + __hip_y1a6;
|
||||
double y6 = x * y5;
|
||||
|
||||
double z1 = __hip_y1b1 + y;
|
||||
double z2 = z1 * y + __hip_y1b2;
|
||||
double z3 = z2 * y + __hip_y1b3;
|
||||
double z4 = z3 * y + __hip_y1b4;
|
||||
double z5 = z4 * y + __hip_y1b5;
|
||||
double z6 = z5 * y + __hip_y1b6;
|
||||
|
||||
ret = (y6 / z6) + __hip_y1c * (__hip_j1(x) * hc::precise_math::log(x) - 1.0 / x);
|
||||
}
|
||||
else {
|
||||
double z = 8.0 / x;
|
||||
double y = z*z;
|
||||
double x1 = x - __hip_y1d;
|
||||
|
||||
double y1 = __hip_y1e1 * y + __hip_y1e2;
|
||||
double y2 = y1 * y + __hip_y1e3;
|
||||
double y3 = y2 * y + __hip_y1e4;
|
||||
double y4 = y3 * y + 1.0;
|
||||
|
||||
double z1 = __hip_y1f1 * y + __hip_y1f2;
|
||||
double z2 = z1 * y + __hip_y1f3;
|
||||
double z3 = z2 * y + __hip_y1f4;
|
||||
double z4 = z3 * y + __hip_y1f5;
|
||||
|
||||
ret = hc::precise_math::sqrt(__hip_y1g / x)*(hc::precise_math::sin(x1)*y4 + z*hc::precise_math::cos(x1)*z4);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
__device__ float __hip_y1f(float x)
|
||||
{
|
||||
float ret;
|
||||
|
||||
if (x < 8.0) {
|
||||
float y = x*x;
|
||||
|
||||
float y1 = __hip_y1a1 * y + __hip_y1a2;
|
||||
float y2 = y1 * y + __hip_y1a3;
|
||||
float y3 = y2 * y + __hip_y1a4;
|
||||
float y4 = y3 * y + __hip_y1a5;
|
||||
float y5 = y4 * y + __hip_y1a6;
|
||||
float y6 = x * y5;
|
||||
|
||||
float z1 = __hip_y1b1 + y;
|
||||
float z2 = z1 * y + __hip_y1b2;
|
||||
float z3 = z2 * y + __hip_y1b3;
|
||||
float z4 = z3 * y + __hip_y1b4;
|
||||
float z5 = z4 * y + __hip_y1b5;
|
||||
float z6 = z5 * y + __hip_y1b6;
|
||||
|
||||
ret = (y6 / z6) + __hip_y1c * (__hip_j1f(x) * hc::precise_math::logf(x) - 1.0 / x);
|
||||
}
|
||||
else {
|
||||
float z = 8.0 / x;
|
||||
float y = z*z;
|
||||
float x1 = x - __hip_y1d;
|
||||
|
||||
float y1 = __hip_y1e1 * y + __hip_y1e2;
|
||||
float y2 = y1 * y + __hip_y1e3;
|
||||
float y3 = y2 * y + __hip_y1e4;
|
||||
float y4 = y3 * y + 1.0;
|
||||
|
||||
float z1 = __hip_y1f1 * y + __hip_y1f2;
|
||||
float z2 = z1 * y + __hip_y1f3;
|
||||
float z3 = z2 * y + __hip_y1f4;
|
||||
float z4 = z3 * y + __hip_y1f5;
|
||||
|
||||
ret = hc::precise_math::sqrtf(__hip_y1g / x)*(hc::precise_math::sinf(x1)*y4 + z*hc::precise_math::cosf(x1)*z4);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
__device__ float acosf(float x)
|
||||
{
|
||||
|
||||
Ссылка в новой задаче
Block a user