52 std::ptrdiff_t lag = 2
58 worker_.resize(std::distance(beg,end) - lag);
59 TReal * pworkerBeg = &
worker_[0];
63 Tit tbeginm1 = tbegin + ( lag);
64 for(;tbeginm1 != end ; ++tbeginm1, ++tbegin, ++pworkerBeg )
66 *pworkerBeg = (*tbeginm1 - *tbegin);
71 std::size_t crosscount = 0;
72 for(
int i = 0 ; (pworkerBeg != pworkerEnd-1) ; ++pworkerBeg , ++i )
74 if(crosscount >= nzercross){
77 std::string
x =
"nzerocross:";
78 x+=boost::lexical_cast<std::string>(nzercross);
80 x+=boost::lexical_cast<std::string>(crosscount);
82 x+= boost::lexical_cast<std::string>(i);
84 x+= boost::lexical_cast<std::string>(
worker_.size() );
86 x+=boost::lexical_cast<std::string>(__LINE__);
89 throw std::length_error(
x.c_str());
91 TReal v1 = (*pworkerBeg);
92 TReal v2 = *(pworkerBeg + 1);
94 if((v1 > 0 && v2 < 0) && ((v1 - v2) >
epsilon_))
97 double frac = v1 / ( v1 - v2 );
98 double idx =
static_cast<float>(i + lag/2) + frac;
99 *zerocrossings = ( idx );
102 }
else if( v1 > 0 && v2 == 0 ){
103 TReal v3 = *(pworkerBeg + 2);
104 if((v3 < 0) && ((v1 - v3) >
epsilon_)){
105 *zerocrossings = (i + lag/2 + 1.);