static int getchan(const img *p, int i, int j, int k, float *f) { const size_t s = ((size_t) p->w * i + j) * ((size_t) p->c) + k; if (p->b == 32) { return normf(p, getfloat(p, (const float *) p->p + s), f); } else if (p->b == 16) { if (p->g) return norms16(p, getint16(p, (const int16_t *) p->p + s), f); else return normu16(p, getuint16(p, (const uint16_t *) p->p + s), f); } else if (p->b == 8) { if (p->g) return norms8(p, ((const int8_t *) p->p)[s], f); else return normu8(p, ((const uint8_t *) p->p)[s], f); } return 0; }
int arParamDecompMatf( const ARdouble source[3][4], float cpara[3][4], float trans[3][4] ) { int r, c; float Cpara[3][4]; float rem1, rem2, rem3; if( source[2][3] >= 0.0 ) { for( r = 0; r < 3; r++ ){ for( c = 0; c < 4; c++ ){ Cpara[r][c] = (float)source[r][c]; } } } else { for( r = 0; r < 3; r++ ){ for( c = 0; c < 4; c++ ){ Cpara[r][c] = -(float)(source[r][c]); } } } for( r = 0; r < 3; r++ ){ for( c = 0; c < 4; c++ ){ cpara[r][c] = 0.0f; } } cpara[2][2] = normf( Cpara[2][0], Cpara[2][1], Cpara[2][2] ); trans[2][0] = Cpara[2][0] / cpara[2][2]; trans[2][1] = Cpara[2][1] / cpara[2][2]; trans[2][2] = Cpara[2][2] / cpara[2][2]; trans[2][3] = Cpara[2][3] / cpara[2][2]; cpara[1][2] = dotf( trans[2][0], trans[2][1], trans[2][2], Cpara[1][0], Cpara[1][1], Cpara[1][2] ); rem1 = Cpara[1][0] - cpara[1][2] * trans[2][0]; rem2 = Cpara[1][1] - cpara[1][2] * trans[2][1]; rem3 = Cpara[1][2] - cpara[1][2] * trans[2][2]; cpara[1][1] = normf( rem1, rem2, rem3 ); trans[1][0] = rem1 / cpara[1][1]; trans[1][1] = rem2 / cpara[1][1]; trans[1][2] = rem3 / cpara[1][1]; cpara[0][2] = dotf( trans[2][0], trans[2][1], trans[2][2], Cpara[0][0], Cpara[0][1], Cpara[0][2] ); cpara[0][1] = dotf( trans[1][0], trans[1][1], trans[1][2], Cpara[0][0], Cpara[0][1], Cpara[0][2] ); rem1 = Cpara[0][0] - cpara[0][1]*trans[1][0] - cpara[0][2]*trans[2][0]; rem2 = Cpara[0][1] - cpara[0][1]*trans[1][1] - cpara[0][2]*trans[2][1]; rem3 = Cpara[0][2] - cpara[0][1]*trans[1][2] - cpara[0][2]*trans[2][2]; cpara[0][0] = normf( rem1, rem2, rem3 ); trans[0][0] = rem1 / cpara[0][0]; trans[0][1] = rem2 / cpara[0][0]; trans[0][2] = rem3 / cpara[0][0]; trans[1][3] = (Cpara[1][3] - cpara[1][2]*trans[2][3]) / cpara[1][1]; trans[0][3] = (Cpara[0][3] - cpara[0][1]*trans[1][3] - cpara[0][2]*trans[2][3]) / cpara[0][0]; for( r = 0; r < 3; r++ ){ for( c = 0; c < 3; c++ ){ cpara[r][c] /= cpara[2][2]; } } return 0; }
__global__ void FloatMathPrecise() { int iX; float fX, fY; acosf(1.0f); acoshf(1.0f); asinf(0.0f); asinhf(0.0f); atan2f(0.0f, 1.0f); atanf(0.0f); atanhf(0.0f); cbrtf(0.0f); fX = ceilf(0.0f); fX = copysignf(1.0f, -2.0f); cosf(0.0f); coshf(0.0f); cospif(0.0f); cyl_bessel_i0f(0.0f); cyl_bessel_i1f(0.0f); erfcf(0.0f); erfcinvf(2.0f); erfcxf(0.0f); erff(0.0f); erfinvf(1.0f); exp10f(0.0f); exp2f(0.0f); expf(0.0f); expm1f(0.0f); fX = fabsf(1.0f); fdimf(1.0f, 0.0f); fdividef(0.0f, 1.0f); fX = floorf(0.0f); fmaf(1.0f, 2.0f, 3.0f); fX = fmaxf(0.0f, 0.0f); fX = fminf(0.0f, 0.0f); fmodf(0.0f, 1.0f); frexpf(0.0f, &iX); hypotf(1.0f, 0.0f); ilogbf(1.0f); isfinite(0.0f); fX = isinf(0.0f); fX = isnan(0.0f); j0f(0.0f); j1f(0.0f); jnf(-1.0f, 1.0f); ldexpf(0.0f, 0); lgammaf(1.0f); llrintf(0.0f); llroundf(0.0f); log10f(1.0f); log1pf(-1.0f); log2f(1.0f); logbf(1.0f); logf(1.0f); lrintf(0.0f); lroundf(0.0f); modff(0.0f, &fX); fX = nanf("1"); fX = nearbyintf(0.0f); nextafterf(0.0f, 0.0f); norm3df(1.0f, 0.0f, 0.0f); norm4df(1.0f, 0.0f, 0.0f, 0.0f); normcdff(0.0f); normcdfinvf(1.0f); fX = 1.0f; normf(1, &fX); powf(1.0f, 0.0f); rcbrtf(1.0f); remainderf(2.0f, 1.0f); remquof(1.0f, 2.0f, &iX); rhypotf(0.0f, 1.0f); fY = rintf(1.0f); rnorm3df(0.0f, 0.0f, 1.0f); rnorm4df(0.0f, 0.0f, 0.0f, 1.0f); fX = 1.0f; rnormf(1, &fX); fY = roundf(0.0f); rsqrtf(1.0f); scalblnf(0.0f, 1); scalbnf(0.0f, 1); signbit(1.0f); sincosf(0.0f, &fX, &fY); sincospif(0.0f, &fX, &fY); sinf(0.0f); sinhf(0.0f); sinpif(0.0f); sqrtf(0.0f); tanf(0.0f); tanhf(0.0f); tgammaf(2.0f); fY = truncf(0.0f); y0f(1.0f); y1f(1.0f); ynf(1, 1.0f); }