|
#define | VL_E 2.718281828459045 |
| Euler constant.
|
|
#define | VL_LOG_OF_2 0.693147180559945 |
| Logarithm of 2 (math constant)
|
|
#define | VL_PI 3.141592653589793 |
| Pi (math constant)
|
|
#define | VL_EPSILON_F 1.19209290E-07F |
| IEEE single precision epsilon (math constant) More...
|
|
#define | VL_EPSILON_D 2.220446049250313e-16 |
| IEEE double precision epsilon (math constant) More...
|
|
#define | VL_NAN_F (vl_nan_f.value) |
| IEEE single precision NaN (not signaling)
|
|
#define | VL_INFINITY_F (vl_infinity_f.value) |
| IEEE single precision positive infinity (not signaling)
|
|
#define | VL_NAN_D (vl_nan_d.value) |
| IEEE double precision NaN (not signaling)
|
|
#define | VL_INFINITY_D (vl_infinity_d.value) |
| IEEE double precision positive infinity (not signaling)
|
|
|
typedef float(* | VlFloatVectorComparisonFunction )(vl_size dimension, float const *X, float const *Y) |
| Pointer to a function to compare vectors of floats.
|
|
typedef double(* | VlDoubleVectorComparisonFunction )(vl_size dimension, double const *X, double const *Y) |
| Pointer to a function to compare vectors of doubles.
|
|
typedef float(* | VlFloatVector3ComparisonFunction )(vl_size dimension, float const *X, float const *Y, float const *Z) |
| Pointer to a function to compare 3 vectors of doubles.
|
|
typedef double(* | VlDoubleVector3ComparisonFunction )(vl_size dimension, double const *X, double const *Y, double const *Z) |
| Pointer to a function to compare 3 vectors of doubles.
|
|
typedef enum
_VlVectorComparisonType | VlVectorComparisonType |
| Vector comparison types.
|
|
|
float | vl_mod_2pi_f (float x) |
| Fast mod(x, 2 * VL_PI) More...
|
|
double | vl_mod_2pi_d (double x) |
| Fast mod(x, 2 * VL_PI) More...
|
|
long int | vl_floor_f (float x) |
| Floor and convert to integer. More...
|
|
long int | vl_floor_d (double x) |
| Floor and convert to integer. More...
|
|
long int | vl_ceil_f (float x) |
| Ceil and convert to integer. More...
|
|
long int | vl_ceil_d (double x) |
| Ceil and convert to integer. More...
|
|
long int | vl_round_f (float x) |
| Round. More...
|
|
long int | vl_round_d (double x) |
| Round. More...
|
|
float | vl_abs_f (float x) |
| Fast abs(x) More...
|
|
double | vl_abs_d (double x) |
| Fast abs(x) More...
|
|
double | vl_log2_d (double x) |
| Base-2 logaritghm. More...
|
|
float | vl_log2_f (float x) |
| Base-2 logaritghm. More...
|
|
double | vl_sqrt_d (double x) |
| Square root. More...
|
|
float | vl_sqrt_f (float x) |
| Square root. More...
|
|
vl_bool | vl_is_nan_f (float x) |
| Check whether a floating point value is NaN. More...
|
|
vl_bool | vl_is_nan_d (double x) |
| Check whether a floating point value is NaN. More...
|
|
vl_bool | vl_is_inf_f (float x) |
| Check whether a floating point value is infinity. More...
|
|
vl_bool | vl_is_inf_d (double x) |
| Check whether a floating point value is infinity. More...
|
|
float | vl_fast_atan2_f (float y, float x) |
| Fast atan2 approximation. More...
|
|
double | vl_fast_atan2_d (double y, double x) |
| Fast atan2 approximation. More...
|
|
float | vl_fast_resqrt_f (float x) |
| Fast resqrt approximation. More...
|
|
double | vl_fast_resqrt_d (double x) |
| Fast resqrt approximation. More...
|
|
float | vl_fast_sqrt_f (float x) |
| Fast sqrt approximation. More...
|
|
double | vl_fast_sqrt_d (float x) |
| Fast sqrt approximation. More...
|
|
vl_uint64 | vl_fast_sqrt_ui64 (vl_uint64 x) |
| Fast integer sqrt approximation. More...
|
|
vl_uint32 | vl_fast_sqrt_ui32 (vl_uint32 x) |
| Fast sqrt approximation. More...
|
|
vl_uint16 | vl_fast_sqrt_ui16 (vl_uint16 x) |
| Fast sqrt approximation. More...
|
|
vl_uint8 | vl_fast_sqrt_ui8 (vl_uint8 x) |
| Fast sqrt approximation. More...
|
|
char const * | vl_get_vector_comparison_type_name (int type) |
| Get the symbolic name of a vector comparison type. More...
|
|
VlFloatVectorComparisonFunction | vl_get_vector_comparison_function_f (VlVectorComparisonType type) |
| Get vector comparison function from comparison type. More...
|
|
VlDoubleVectorComparisonFunction | vl_get_vector_comparison_function_d (VlVectorComparisonType type) |
| Get vector comparison function from comparison type. More...
|
|
void | vl_eval_vector_comparison_on_all_pairs_f (float *result, vl_size dimension, float const *X, vl_size numDataX, float const *Y, vl_size numDataY, VlFloatVectorComparisonFunction function) |
| Evaluate vector comparison function on all vector pairs. More...
|
|
void | vl_eval_vector_comparison_on_all_pairs_d (double *result, vl_size dimension, double const *X, vl_size numDataX, double const *Y, vl_size numDataY, VlDoubleVectorComparisonFunction function) |
| Evaluate vector comparison function on all vector pairs. More...
|
|
float vl_fast_atan2_f |
( |
float |
y, |
|
|
float |
x |
|
) |
| |
|
inline |
- Parameters
-
The function computes a relatively rough but fast approximation of atan2(y,x)
.
- Algorithm
The algorithm approximates the function \( f(r)=atan((1-r)/(1+r)) \), \( r \in [-1,1] \) with a third order polynomial \( f(r)=c_0 + c_1 r + c_2 r^2 + c_3 r^3 \). To fit the polynomial we impose the constraints
\begin{eqnarray*} f(+1) &=& c_0 + c_1 + c_2 + c_3 = atan(0) = 0,\\ f(-1) &=& c_0 - c_1 + c_2 - c_3 = atan(\infty) = \pi/2,\\ f(0) &=& c_0 = atan(1) = \pi/4. \end{eqnarray*}
The last degree of freedom is fixed by minimizing the \( l^{\infty} \) error, which yields
\[ c_0=\pi/4, \quad c_1=-0.9675, \quad c_2=0, \quad c_3=0.1821, \]
with maximum error of 0.0061 radians at 0.35 degrees.
- Returns
- Approximation of
atan2(y,x)
.
float vl_fast_resqrt_f |
( |
float |
x | ) |
|
|
inline |
- Parameters
-
- Returns
- approximation of
resqrt(x)
.
The function quickly computes an approximation of \( x^{-1/2} \).
- Algorithm
The goal is to compute \( y = x^{-1/2} \), which we do by finding the solution of \( 0 = f(y) = y^{-2} - x \) by two Newton steps. Each Newton iteration is given by
\[ y \leftarrow y - \frac{f(y)}{\frac{df(y)}{dy}} = y + \frac{1}{2} (y-xy^3) = \frac{y}{2} \left( 3 - xy^2 \right) \]
which yields a simple polynomial update rule.
The clever bit (attributed to either J. Carmack or G. Tarolli) is the way an initial guess \( y \approx x^{-1/2} \) is chosen.
- See Also
- Inverse Sqare Root.