14 #include <emmintrin.h>
18 #define RAD2DEG 180./M_PI
27 vec->v=_mm_setzero_pd();
29 DVector2(
const double a,
const double b)
32 vec->v=_mm_setr_pd(a,b);
46 __m128d GetV()
const {
return vec->v;}
55 double &operator() (
int row){
58 double operator() (
int row)
const{
62 void Set(
double a,
double b){
63 vec->v=_mm_setr_pd(a,b);
66 double X()
const {
return vec->d[0];}
67 double Y()
const {
return vec->d[1];}
71 return DVector2(_mm_sub_pd(GetV(),v1.GetV()));
74 vec->v=_mm_sub_pd(GetV(),v1.GetV());
79 return DVector2(_mm_add_pd(GetV(),v1.GetV()));
82 vec->v=_mm_add_pd(GetV(),v1.GetV());
87 uint32_t padded_space1[8];
91 }*
const scale =
reinterpret_cast<struct dvec1 *
>
92 ((
reinterpret_cast<uintptr_t
>(padded_space1)+15) & ~ 15);
93 scale->val=_mm_set1_pd(1./c);
94 vec->v=_mm_mul_pd(vec->v,scale->val);
99 return (
X()*v1.X()+Y()*v1.Y());
102 DVector2 &operator*=(
const double c){
103 uint32_t padded_space1[8];
107 }*
const scale =
reinterpret_cast<struct dvec1 *
>
108 ((
reinterpret_cast<uintptr_t
>(padded_space1)+15) & ~ 15);
109 scale->val=_mm_set1_pd(c);
110 vec->v=_mm_mul_pd(scale->val,GetV());
113 double Mod2()
const {
return (
X()*
X()+Y()*Y());}
114 double Mod()
const {
return sqrt(
X()*
X()+Y()*Y());}
115 double Phi()
const {
return atan2(Y(),
X());}
118 double DeltaPhi(
const DVector2 &v1)
const {
119 double twopi=2.*M_PI;
120 double dphi=Phi()-v1.Phi();
121 while (dphi>=M_PI) dphi-=twopi;
122 while (dphi<-M_PI) dphi+=twopi;
127 double Phi_0_2pi(
double angle){
128 double twopi=2.*M_PI;
129 while (angle>=twopi) angle-=twopi;
130 while (angle<0) angle+=twopi;
136 cout <<
"DVector2 (x,y)=("<<
X()<<
","<<Y()<<
") (rho,phi)=("<< Mod()
137 <<
","<<
RAD2DEG*Phi()<<
")"<<endl;
153 scale=_mm_set1_pd(c);
159 scale=_mm_set1_pd(c);
166 scale=_mm_set1_pd(1./c);
DMatrix2x1 operator*(const double c, const DMatrix2x1 &M)
#define ALIGNED_16_BLOCK_PTR(TYPE, NUM, PTR)
DVector2S operator+(const DVector2S &vec1, const DVector2S &vec2)
#define ALIGNED_16_BLOCK_WITH_PTR(TYPE, NUM, PTR)
DVector2S operator-(const DVector2S &vec1, const DVector2S &vec2)
#define ALIGNED_16_BLOCK(TYPE, NUM, PTR)