2 #ifndef vnl_c_na_vector_hxx_ 3 #define vnl_c_na_vector_hxx_ 14 # include <vcl_msvc_warnings.h> 26 bool any_valid(
false);
27 for (
const T* end =
v+n;
v != end;
v++)
35 return any_valid ? tot :
vnl_na(T());
43 for (
const T* end = p+n; p != end; p++)
49 return n_finite ? tot/
abs_t(n_finite) :
vnl_na(T());
56 template <
class T,
class S>
60 bool any_valid(
false);
61 for (T
const * end = p+n; p != end; p++)
69 *out = any_valid ? val :
vnl_na(T());
72 template <
class T,
class S>
77 for (T
const* end = p+n; p != end; p++)
86 *out = n_finite ? S(std::sqrt(real_t(val/n_finite))) :
vnl_na(T());
89 template <
class T,
class S>
93 bool any_valid(
false);
94 for (T
const* end = p+n; p != end; p++)
102 *out = any_valid ? val :
vnl_na(T());
105 template <
class T,
class S>
110 *out = S(std::sqrt(real_t(*out)));
114 template <
class T,
class S>
118 bool any_valid(
false);
119 for (T
const* end = p+n; p != end; p++)
128 *out = any_valid ? val :
vnl_na(T());
138 for (T
const* end =
v+size-1;
v != end;
v++)
148 #define VNL_C_NA_VECTOR_INSTANTIATE_norm(T, S) \ 149 template VNL_EXPORT void vnl_c_na_vector_two_norm_squared(T const *, unsigned, S *); \ 150 template VNL_EXPORT void vnl_c_na_vector_two_norm(T const *, unsigned, S *); \ 151 template VNL_EXPORT void vnl_c_na_vector_one_norm(T const *, unsigned, S *); \ 152 template VNL_EXPORT void vnl_c_na_vector_rms_norm(T const *, unsigned, S *); \ 153 template VNL_EXPORT void vnl_c_na_vector_inf_norm(T const *, unsigned, S *) 155 #undef VNL_C_NA_VECTOR_INSTANTIATE_ordered 156 #define VNL_C_NA_VECTOR_INSTANTIATE_ordered(T) \ 157 VNL_C_NA_VECTOR_INSTANTIATE_norm(T, vnl_c_na_vector<T >::abs_t); \ 158 template class vnl_c_na_vector<T >; \ 159 template std::ostream& print_na_vector(std::ostream &,T const *,unsigned) 162 #undef VNL_C_NA_VECTOR_INSTANTIATE_unordered 163 #define VNL_C_NA_VECTOR_INSTANTIATE_unordered(T) 165 #ifndef DOXYGEN_SHOULD_SKIP_THIS 166 #undef VNL_C_NA_VECTOR_INSTANTIATE 167 #define VNL_C_NA_VECTOR_INSTANTIATE(T) extern "no such macro; use e.g. VNL_C_NA_VECTOR_INSTANTIATE_ordered instead" 168 #endif // DOXYGEN_SHOULD_SKIP_THIS 170 #endif // vnl_c_na_vector_hxx_ void vnl_c_na_vector_two_norm(T const *p, unsigned n, S *out)
void vnl_c_na_vector_rms_norm(T const *p, unsigned n, S *out)
void vnl_c_na_vector_inf_norm(T const *p, unsigned n, S *out)
void vnl_na_insert(std::ostream &os, double x)
Write a floating point number or "NA" to a stream.
Templated zero/one/precision.
To allow templated algorithms to determine appropriate actions of conjugation, complexification etc.
void vnl_c_na_vector_two_norm_squared(T const *p, unsigned n, S *out)
void vnl_c_na_vector_one_norm(T const *p, unsigned n, S *out)
Namespace with standard math functions.
vnl_numeric_traits< T >::abs_t abs_t
static T mean(T const *p, unsigned n)
NA (Not Available) is a particular double (or single-precision) NaN to represent missing data.
vnl_bignum squared_magnitude(vnl_bignum const &x)
VNL_EXPORT std::ostream & print_na_vector(std::ostream &, T const *, unsigned)
Input & output.
Math on blocks of memory.
bool vnl_na_isna(double x)
True if parameter is specific NA qNaN.
vnl_bignum abs(vnl_bignum const &x)
double vnl_na(double)
A particular qNaN to indicate not available.
static T sum(T const *v, unsigned n)