52 #ifndef __PCL_Vector_h
53 #define __PCL_Vector_h
58 #include <pcl/Diagnostics.h>
67 #ifndef __PCL_NO_VECTOR_STATISTICS
71 #ifndef __PCL_NO_VECTOR_INSTANTIATE
105 template <
typename T>
149 PCL_PRECONDITION( len >= 0 )
150 m_data =
new Data( len );
161 PCL_PRECONDITION( len >= 0 )
162 m_data =
new Data( len );
163 iterator __restrict__ i = m_data->Begin();
180 template <
typename T1>
183 PCL_PRECONDITION( len >= 0 )
184 m_data =
new Data( len );
187 iterator __restrict__ i = m_data->Begin();
189 const T1* __restrict__ k = a;
191 for ( ; i < j; ++i, ++k )
204 template <
typename T1>
214 template <
typename T1>
217 m_data =
new Data( 3 );
228 template <
typename T1>
231 m_data =
new Data( 4 );
266 template <
typename T1>
278 if ( m_data !=
nullptr )
291 if ( m_data->IsUnique() )
292 m_data->Deallocate();
295 Data* newData =
new Data( 0 );
403 Data* newData =
new Data( m_data->Length() );
407 iterator __restrict__ i = m_data->Begin();
430 if ( x.
Length() < Length() )
431 throw Error(
"Invalid vector addition." );
433 iterator __restrict__ i = m_data->Begin();
437 for ( ; i < j; ++i, ++k )
457 if ( x.
Length() < Length() )
458 throw Error(
"Invalid vector subtraction." );
460 iterator __restrict__ i = m_data->Begin();
464 for ( ; i < j; ++i, ++k )
484 if ( x.
Length() < Length() )
485 throw Error(
"Invalid vector multiplication." );
487 iterator __restrict__ i = m_data->Begin();
491 for ( ; i < j; ++i, ++k )
515 if ( x.
Length() < Length() )
516 throw Error(
"Invalid vector division." );
518 iterator __restrict__ i = m_data->Begin();
522 for ( ; i < j; ++i, ++k )
527 #define IMPLEMENT_SCALAR_ASSIGN_OP( op ) \
530 iterator __restrict__ i = m_data->Begin(); \
531 const_iterator __restrict__ j = m_data->End(); \
533 for ( ; i < j; ++i ) \
538 Data* newData = new Data( m_data->Length() ); \
539 const_iterator __restrict__ i = m_data->Begin(); \
540 const_iterator __restrict__ j = m_data->End(); \
541 iterator __restrict__ k = newData->Begin(); \
543 for ( ; i < j; ++i, ++k ) \
560 IMPLEMENT_SCALAR_ASSIGN_OP( + )
573 IMPLEMENT_SCALAR_ASSIGN_OP( - )
586 IMPLEMENT_SCALAR_ASSIGN_OP( * )
599 IMPLEMENT_SCALAR_ASSIGN_OP( / )
614 iterator __restrict__ i = m_data->Begin();
622 Data* newData =
new Data( m_data->Length() );
625 iterator __restrict__ k = newData->Begin();
627 for ( ; i < j; ++i, ++k )
635 #undef IMPLEMENT_SCALAR_ASSIGN_OP
647 PCL_PRECONDITION( v.Length() >= Length() )
653 for ( ; i < j; ++i, ++k )
667 PCL_PRECONDITION( Length() == 3 && v2.
Length() == 3 )
688 iterator __restrict__ k = R.Begin();
690 for ( ; i < j; ++i, ++k )
705 iterator __restrict__ i = m_data->Begin();
713 Data* newData =
new Data( m_data->Length() );
716 iterator __restrict__ k = newData->Begin();
718 for ( ; i < j; ++i, ++k )
735 iterator __restrict__ k = R.Begin();
737 for ( ; i < j; ++i, ++k )
752 iterator __restrict__ i = m_data->Begin();
760 Data* newData =
new Data( m_data->Length() );
763 iterator __restrict__ k = newData->Begin();
765 for ( ; i < j; ++i, ++k )
782 iterator __restrict__ k = R.Begin();
784 for ( ; i < j; ++i, ++k )
799 iterator __restrict__ i = m_data->Begin();
806 Data* newData =
new Data( m_data->Length() );
809 iterator __restrict__ k = newData->Begin();
811 for ( ; i < j; ++i, ++k )
828 iterator __restrict__ k = R.Begin();
830 for ( ; i < j; ++i, ++k )
845 iterator __restrict__ i = m_data->Begin();
853 Data* newData =
new Data( m_data->Length() );
856 iterator __restrict__ k = newData->Begin();
858 for ( ; i < j; ++i, ++k )
877 return pcl::Norm( m_data->Begin(), m_data->End(), p );
886 return pcl::L1Norm( m_data->Begin(), m_data->End() );
895 return pcl::L2Norm( m_data->Begin(), m_data->End() );
928 (void)
operator /=( N );
937 pcl::Sort( m_data->Begin(), m_data->End() );
956 pcl::Sort( m_data->Begin(), m_data->End(),
957 [](
const scalar& a,
const scalar& b ){ return b < a; } );
980 pcl::Sort( m_data->Begin(), m_data->End(), p );
1002 return (p != m_data->End()) ? int( p - m_data->Begin() ) : -1;
1022 return (p != m_data->End()) ? int( p - m_data->Begin() ) : -1;
1033 #ifndef __PCL_NO_VECTOR_STATISTICS
1044 return int(
pcl::MinItem( m_data->Begin(), m_data->End() ) - m_data->Begin() );
1056 return int(
pcl::MaxItem( m_data->Begin(), m_data->End() ) - m_data->Begin() );
1070 if ( m_data->Length() > 0 )
1071 for (
iterator j = m_data->Begin(); ++j < m_data->End(); )
1074 return i - m_data->Begin();
1088 if ( m_data->Length() > 0 )
1089 for (
iterator j = m_data->Begin(); ++j < m_data->End(); )
1092 return i - m_data->Begin();
1105 if ( m_data->Length() > 0 )
1108 if ( ++i == m_data->End() )
1109 return m_data->Length();
1110 for (
iterator j = i; ++j < m_data->End(); )
1115 return i - m_data->Begin();
1129 if ( m_data->Length() > 0 )
1132 if ( ++i == m_data->End() )
1133 return m_data->Length();
1134 for (
iterator j = i; ++j < m_data->End(); )
1139 return i - m_data->Begin();
1148 if ( m_data->Length() > 0 )
1149 return *
pcl::MinItem( m_data->Begin(), m_data->End() );
1159 if ( m_data->Length() > 0 )
1160 return *
pcl::MaxItem( m_data->Begin(), m_data->End() );
1182 PCL_PRECONDITION( !IsEmpty() )
1183 PCL_PRECONDITION( k >= 0 && k < m_data->Length() )
1185 return *
pcl::Select( m_data->Begin(), m_data->End(), k );
1214 return pcl::Sum( m_data->Begin(), m_data->End() );
1274 return pcl::Mean( m_data->Begin(), m_data->End() );
1330 return pcl::StdDev( m_data->Begin(), m_data->End() );
1340 return pcl::Median( m_data->Begin(), m_data->End() );
1357 double AvgDev(
double center )
const noexcept
1359 return pcl::AvgDev( m_data->Begin(), m_data->End(), center );
1396 return pcl::AvgDev( m_data->Begin(), m_data->End() );
1449 double MAD(
double center )
const
1451 return pcl::MAD( m_data->Begin(), m_data->End(), center );
1466 return pcl::MAD( m_data->Begin(), m_data->End() );
1524 double BiweightMidvariance(
double center,
double sigma,
int k = 9,
bool reducedLength =
false ) const noexcept
1559 double center =
Median();
1578 int k = 9,
bool reducedLength =
false ) const noexcept
1591 double center =
Median();
1715 return pcl::Hash64( m_data->Begin(), m_data->Size(), seed );
1728 return pcl::Hash32( m_data->Begin(), m_data->Size(), seed );
1745 return m_data->IsUnique();
1754 return m_data == x.m_data;
1768 Data* newData =
new Data( m_data->Length() );
1771 iterator __restrict__ k = newData->Begin();
1773 for ( ; i < j; ++i, ++k )
1786 return m_data->Length();
1795 return m_data->Size();
1814 return m_data !=
nullptr;
1823 return Length() == 0;
1831 operator bool() const noexcept
1843 return IsAliasOf( x ) || SameLength( x ) &&
pcl::Equal( Begin(), x.Begin(), x.End() );
1857 return !IsAliasOf( x ) &&
pcl::Compare( Begin(), End(), x.Begin(), x.End() ) < 0;
1865 return Length() == x.Length();
1878 return m_data->At( i );
1887 return m_data->At( i );
1903 return m_data->Begin();
1915 return m_data->Begin();
1962 return m_data->End();
1975 return m_data->End();
2042 return m_data->At( i );
2045 #ifndef __PCL_NO_STL_COMPATIBLE_ITERATORS
2100 template <
typename T1,
typename T2>
2103 PCL_PRECONDITION( Length() >= 3 )
2104 double x = *At( 0 );
2105 double y = *At( 1 );
2106 double z = *At( 2 );
2107 double m2 = x*x + y*y;
2108 lon = T1( (m2 == 0) ? 0.0 :
ArcTan( y, x ) );
2120 template <
typename T1,
typename T2>
2123 ToSpherical( lon, lat );
2161 template <
typename T1,
typename T2>
2164 double slon, clon, slat, clat;
2165 SinCos(
double( lon ), slon, clon );
2166 SinCos(
double( lat ), slat, clat );
2167 return FromSpherical( slon, clon, slat, clat );
2180 template <
typename T1>
2207 return ArcTan( x1*y2 - y1*x2, Dot( v ) );
2248 return ArcTan( (((n * c) >= 0) ? 1 : -1) * c.
L2Norm(), Dot( v ) );
2267 template <
class S,
typename SP>
2268 S& ToSeparated( S& s, SP separator )
const
2273 s.Append( S( *i ) );
2277 s.Append( separator );
2278 s.Append( S( *i ) );
2307 template <
class S,
typename SP,
class AF>
2308 S& ToSeparated( S& s, SP separator, AF append )
const
2313 append( s, S( *i ) );
2320 append( s, S( *i ) );
2337 S& ToCommaSeparated( S& s )
const
2339 return ToSeparated( s,
',' );
2351 S& ToSpaceSeparated( S& s )
const
2353 return ToSeparated( s,
' ' );
2365 S& ToTabSeparated( S& s )
const
2367 return ToSeparated( s,
'\t' );
2380 component* v =
nullptr;
2395 int Length() const noexcept
2402 return size_type( n )*
sizeof( component );
2405 iterator At(
int i )
const noexcept
2410 iterator Begin() const noexcept
2417 iterator End() const noexcept
2422 void Allocate(
int len )
2425 if ( likely( std::is_scalar<component>::value ) )
2427 v =
reinterpret_cast<component*
>( PCL_ALIGNED_MALLOC( Size(), 32 ) );
2428 if ( unlikely( v ==
nullptr ) )
2431 throw std::bad_alloc();
2435 v =
new component[ len ];
2440 PCL_PRECONDITION( refCount == 0 )
2441 if ( likely( std::is_scalar<component>::value ) )
2442 PCL_ALIGNED_FREE( v );
2454 Data* m_data =
nullptr;
2460 void DetachFromData()
2462 if ( !m_data->Detach() )
2483 template <
typename T>
inline
2487 if ( B.Length() < n )
2488 throw Error(
"Invalid vector addition." );
2493 if ( likely( !A.IsAliasOf( B ) ) )
2497 for ( ; a < c; ++a, ++b, ++r )
2503 for ( ; a < c; ++a, ++r )
2516 template <
typename T>
inline
2520 return std::move( A );
2530 template <
typename T>
inline
2534 return std::move( B );
2545 template <
typename T>
inline
2549 return std::move( A );
2556 template <
typename T,
typename S>
inline
2564 for ( ; a < c; ++a, ++r )
2573 template <
typename T,
typename S>
inline
2577 return std::move( A );
2587 template <
typename T,
typename S>
inline
2600 template <
typename T,
typename S>
inline
2604 return std::move( A );
2616 template <
typename T>
inline
2620 if ( B.Length() < n )
2621 throw Error(
"Invalid vector subtraction." );
2627 if ( likely( !A.IsAliasOf( B ) ) )
2631 for ( ; a < c; ++a, ++b, ++r )
2637 for ( ; a < c; ++a, ++r )
2651 template <
typename T>
inline
2655 return std::move( A );
2666 template <
typename T>
inline
2669 if ( A.Length() < B.Length() )
2670 throw Error(
"Invalid vector subtraction." );
2676 for ( ; b < c; ++a, ++b )
2678 return std::move( B );
2689 template <
typename T>
inline
2693 return std::move( A );
2700 template <
typename T,
typename S>
inline
2708 for ( ; a < c; ++a, ++r )
2718 template <
typename T,
typename S>
inline
2722 return std::move( A );
2733 template <
typename T,
typename S>
inline
2741 for ( ; a < c; ++a, ++r )
2755 template <
typename T,
typename S>
inline
2761 for ( ; a < c; ++a )
2763 return std::move( A );
2776 template <
typename T>
inline
2779 PCL_PRECONDITION( A.Length() == 3 && B.Length() == 3 )
2781 A[2]*B[0] - A[0]*B[2],
2782 A[0]*B[1] - A[1]*B[0] );
2793 template <
typename T>
inline
2796 T x = A[1]*B[2] - A[2]*B[1],
2797 y = A[2]*B[0] - A[0]*B[2],
2798 z = A[0]*B[1] - A[1]*B[0];
2800 a[0] = x; a[1] = y; a[2] = z;
2801 return std::move( A );
2812 template <
typename T>
inline
2815 T x = A[1]*B[2] - A[2]*B[1],
2816 y = A[2]*B[0] - A[0]*B[2],
2817 z = A[0]*B[1] - A[1]*B[0];
2819 b[0] = x; b[1] = y; b[2] = z;
2820 return std::move( B );
2832 template <
typename T>
inline
2835 T x = A[1]*B[2] - A[2]*B[1],
2836 y = A[2]*B[0] - A[0]*B[2],
2837 z = A[0]*B[1] - A[1]*B[0];
2839 a[0] = x; a[1] = y; a[2] = z;
2840 return std::move( A );
2853 template <
typename T>
inline
2856 PCL_PRECONDITION( B.Length() >= A.Length() )
2860 if ( likely( !A.IsAliasOf( B ) ) )
2864 for ( ; a < c; ++a, ++b )
2870 for ( ; a < c; ++a )
2882 template <
typename T,
typename S>
inline
2890 for ( ; a < c; ++a, ++r )
2899 template <
typename T,
typename S>
inline
2903 return std::move( A );
2913 template <
typename T,
typename S>
inline
2926 template <
typename T,
typename S>
inline
2930 return std::move( A );
2939 template <
typename T,
typename S>
inline
2947 for ( ; a < c; ++a, ++r )
2957 template <
typename T,
typename S>
inline
2961 return std::move( A );
2971 template <
typename T,
typename S>
inline
2979 for ( ; a < c; ++a, ++r )
2992 template <
typename T,
typename S>
inline
2998 for ( ; a < c; ++a )
3000 return std::move( A );
3008 template <
typename T>
inline
3012 if ( B.Length() < n )
3013 throw Error(
"Invalid vector division." );
3019 if ( likely( !A.IsAliasOf( B ) ) )
3023 for ( ; a < c; ++a, ++b, ++r )
3029 for ( ; a < c; ++a, ++r )
3040 template <
typename T>
inline
3052 template <
typename T,
typename S>
inline
3060 for ( ; a < c; ++a, ++r )
3070 template <
typename T,
typename S>
inline
3074 return std::move( A );
3084 template <
typename T,
typename S>
inline
3092 for ( ; a < c; ++a, ++r )
3105 template <
typename T,
typename S>
inline
3111 for ( ; a < c; ++a )
3113 return std::move( A );
3118 #ifndef __PCL_NO_VECTOR_INSTANTIATE
3131 using I8Vector = GenericVector<int8>;
3243 using SzVector = GenericVector<size_type>;
3271 using F64Vector = GenericVector<double>;
3300 using C32Vector = GenericVector<Complex32>;
3309 using C64Vector = GenericVector<Complex64>;
3324 using F80Vector = GenericVector<long double>;
8-bit unsigned integer vector.
32-bit floating point complex vector.
64-bit floating point complex vector.
8-bit signed integer vector.
64-bit floating point real vector.
Root base class of all PCL containers of objects.
A simple exception with an associated error message.
32-bit floating point real vector.
64-bit floating point real vector.
80-bit extended precision floating point real vector.
32-bit floating point real vector.
Generic vector of arbitrary length.
void Transfer(GenericVector &x)
double Angle2D(const GenericVector &v) const noexcept
double StdDev() const noexcept
GenericVector(const T1 *a, int len)
double TrimmedMeanOfSquares(distance_type l=1, distance_type h=1) const noexcept
double BendMidvariance(double beta=0.2) const
TwoSidedEstimate TwoSidedBiweightMidvariance(double center, const TwoSidedEstimate &sigma, int k=9, bool reducedLength=false) const noexcept
scalar L1Norm() const noexcept
void Transfer(GenericVector &&x)
static GenericVector FromSpherical(double slon, double clon, double slat, double clat)
double BiweightMidvariance(double center, double sigma, int k=9, bool reducedLength=false) const noexcept
const_iterator end() const noexcept
component OrderStatistic(int k)
double Angle3D(const GenericVector &v) const noexcept
const_iterator ConstEnd() const noexcept
bool IsUnique() const noexcept
double SumOfSquares() const noexcept
void ToSpherical(T1 &lon, T2 &lat) const noexcept
size_type Size() const noexcept
GenericVector Sorted() const
int IndexOfLastLargestComponent() const noexcept
double Angle3D(const GenericVector &v, const GenericVector &n) const
component MaxComponent() const noexcept
TwoSidedEstimate TwoSidedMAD() const
int FindFirst(const component &x) const noexcept
GenericVector Sqrt() const
double StableSum() const noexcept
double StableAvgDev(double center) const noexcept
GenericVector Cross(const GenericVector &v2) const
GenericVector(std::initializer_list< T1 > c)
static GenericVector FromArray(const T1 *a, int len)
int IndexOfLastSmallestNonzeroComponent() const noexcept
int FindLast(const component &x) const noexcept
scalar Norm(double p) const noexcept
bool IsEmpty() const noexcept
double StableModulus() const noexcept
uint64 Hash64(uint64 seed=0) const noexcept
GenericVector Sorted(BP p) const
GenericVector Unit() const
int IndexOfLargestComponent() const noexcept
int IndexOfSmallestNonzeroComponent() const noexcept
int Find(const component &x) const noexcept
friend void Swap(GenericVector &x1, GenericVector &x2) noexcept
double StableSumOfSquares() const noexcept
bool IsValid() const noexcept
component MinComponent() const noexcept
uint64 Hash(uint64 seed=0) const noexcept
double Variance() const noexcept
void Assign(const GenericVector &x)
const_iterator Begin() const noexcept
scalar Dot(const GenericVector &v) const noexcept
double MAD(double center) const
GenericVector Sqr() const
uint32 Hash32(uint32 seed=0) const noexcept
GenericVector(GenericVector &&x)
static GenericVector FromSpherical(const T1 &lon, const T2 &lat)
double BiweightMidvariance(int k=9, bool reducedLength=false) const
scalar L2Norm() const noexcept
iterator ComponentPtr(int i) noexcept
int Length() const noexcept
GenericVector(const GenericVector< T1 > &x)
TwoSidedEstimate TwoSidedAvgDev() const
TwoSidedEstimate TwoSidedBiweightMidvariance(int k=9, bool reducedLength=false) const
TwoSidedEstimate TwoSidedAvgDev(double center) const noexcept
void ToSpherical2Pi(T1 &lon, T2 &lat) const noexcept
const_iterator End() const noexcept
GenericVector ReverseSorted() const
GenericVector(const T1 &x, const T1 &y, const T1 &z)
scalar Norm() const noexcept
iterator DataPtr() noexcept
double StableAvgDev() const
double Sum() const noexcept
double TrimmedMean(distance_type l=1, distance_type h=1) const noexcept
bool IsAliasOf(const GenericVector &x) const noexcept
double Modulus() const noexcept
GenericVector(const T1 &x, const T1 &y, const T1 &z, const T1 &t)
int IndexOfSmallestComponent() const noexcept
double StableMean() const noexcept
bool Contains(const component &x) const noexcept
component OrderStatistic(int k) const
TwoSidedEstimate TwoSidedMAD(double center) const
const_iterator At(int i) const noexcept
bool SameLength(const GenericVector &x) const noexcept
GenericVector Abs() const
double AvgDev(double center) const noexcept
GenericVector(const component &x, int len)
GenericVector(const GenericVector &x)
const_iterator ConstBegin() const noexcept
int IndexOfLastSmallestComponent() const noexcept
double BendMidvariance(double center, double beta=0.2) const
const_iterator begin() const noexcept
16-bit signed integer vector.
32-bit signed integer vector.
8-bit signed integer vector.
32-bit signed integer vector.
80-bit extended precision floating point real vector.
Thread-safe reference counter for copy-on-write data structures.
size_type integer vector.
16-bit unsigned integer vector.
32-bit unsigned integer vector.
64-bit unsigned integer vector.
8-bit unsigned integer vector.
32-bit unsigned integer vector.
64-bit floating point real vector.
bool operator==(const Array< T, A > &x1, const Array< T, A > &x2) noexcept
bool operator<(const Array< T, A > &x1, const Array< T, A > &x2) noexcept
Complex< T1 > operator-(const Complex< T1 > &c1, const Complex< T2 > &c2) noexcept
Complex< T1 > operator*(const Complex< T1 > &c1, const Complex< T2 > &c2) noexcept
Complex< T1 > operator+(const Complex< T1 > &c1, const Complex< T2 > &c2) noexcept
Complex< T1 > operator/(const Complex< T1 > &c1, const Complex< T2 > &c2) noexcept
Complex< T1 > Pow(const Complex< T1 > &c, T2 x) noexcept
Complex< T > Sqrt(const Complex< T > &c) noexcept
T Abs(const Complex< T > &c) noexcept
uint64 Hash64(const void *data, size_type size, uint64 seed=0) noexcept
uint32 Hash32(const void *data, size_type size, uint32 seed=0) noexcept
GenericImage< P > operator^(const GenericImage< P > &image, T scalar)
void SinCos(T x, T &sx, T &cx) noexcept
T L1Norm(const T *i, const T *j) noexcept
constexpr T ArcTan(T x) noexcept
constexpr long double TwoPi() noexcept
T Norm(const T *i, const T *j, const P &p) noexcept
T L2Norm(const T *i, const T *j) noexcept
void Swap(GenericPoint< T > &p1, GenericPoint< T > &p2) noexcept
unsigned long long uint64
FI LinearSearch(FI i, FI j, const T &v) noexcept
BI LinearSearchLast(BI i, BI j, const T &v) noexcept
RI Select(RI i, RI j, distance_type k)
double Qn(T *__restrict__ x, T *__restrict__ xn)
double BendMidvariance(const T *__restrict__ x, const T *__restrict__ xn, double center, double beta=0.2)
TwoSidedEstimate TwoSidedMAD(const T *__restrict__ i, const T *__restrict__ j, double center)
double MAD(const T *__restrict__ i, const T *__restrict__ j, double center)
double StableModulus(const T *__restrict__ i, const T *__restrict__ j) noexcept
double SumOfSquares(const T *__restrict__ i, const T *__restrict__ j) noexcept
double StableMean(const T *__restrict__ i, const T *__restrict__ j) noexcept
double TrimmedMean(const T *__restrict__ i, const T *__restrict__ j, distance_type l=1, distance_type h=1)
double StableSum(const T *__restrict__ i, const T *__restrict__ j) noexcept
double Variance(const T *__restrict__ i, const T *__restrict__ j, double center) noexcept
TwoSidedEstimate TwoSidedBiweightMidvariance(const T *__restrict__ x, const T *__restrict__ xn, double center, const TwoSidedEstimate &sigma, int k=9, bool reducedLength=false) noexcept
double Sum(const T *__restrict__ i, const T *__restrict__ j) noexcept
double StableSumOfSquares(const T *__restrict__ i, const T *__restrict__ j) noexcept
double BiweightMidvariance(const T *__restrict__ x, const T *__restrict__ xn, double center, double sigma, int k=9, bool reducedLength=false) noexcept
double StdDev(const T *__restrict__ i, const T *__restrict__ j, double center) noexcept
double TrimmedMeanOfSquares(const T *__restrict__ i, const T *__restrict__ j, distance_type l=1, distance_type h=1)
double AvgDev(const T *__restrict__ i, const T *__restrict__ j, double center) noexcept
double Mean(const T *__restrict__ i, const T *__restrict__ j) noexcept
double StableAvgDev(const T *__restrict__ i, const T *__restrict__ j, double center) noexcept
double Median(const T *__restrict__ i, const T *__restrict__ j)
TwoSidedEstimate TwoSidedAvgDev(const T *__restrict__ i, const T *__restrict__ j, double center) noexcept
double Modulus(const T *__restrict__ i, const T *__restrict__ j) noexcept
double Sn(T *__restrict__ x, T *__restrict__ xn)
FI MinItem(FI i, FI j) noexcept
bool Equal(FI1 i1, FI2 i2, FI2 j2) noexcept
int Compare(FI1 i1, FI1 j1, FI2 i2, FI2 j2) noexcept
FI MaxItem(FI i, FI j) noexcept
Two-sided descriptive statistical estimate.