ceil(), round(), floor() 함수의 실행 속도 - 페이지 8

 
Nikolai Semko :

양수 및 음수 변형:

이것은 이미 3~4배의 속도 향상을 제공하는 ceil(), round(), floor() 함수에 대한 본격적인 대체를 위한 응용 프로그램인 것 같습니다.

다소 그럴싸해 보입니다. 나는 _round()를 실행했는데, compare_prices() 함수를 보여주는 것을 기억하십시오. 따라서 가격 모델을 찾는 스크립트가 있으며, 거기에서 compare_prices()가 매우 적극적으로 호출되는 것이 분명합니다. 결과:

std 라운드로 가격을 비교하고 포인트 = 13초의 차이를 확인합니다.
std 라운드가 있는 비교 가격 및 포인트 차이에 대한 비활성화 검사 = 19초
_round를 사용하여 가격을 비교하고 포인트 = 15초에서 차액 확인이 비활성화됨
_round와 가격 비교 및 포인트 차이 확인 = 13초


결론이 전송됩니다. 실제 작업에서 호출의 사자 부분은 체크인으로 끝납니다. Point . 시간은 동일하며(Point의 차이 확인이 활성화된 상태에서) 작업 범위는 1.7 * 10^308에서 약 2 * 10^9(긴 경우에는 ^19)로 떨어졌습니다. 정도, 카트의 다섯 번째 바퀴로 라운드가 필요합니다). 글쎄, 나는 당신이이 기능을 어떻게 든 이국적으로 사용하는지 모릅니다 ...

추신:

 Alert ( _ceil(- 1 + DBL_EPSILON ) );   // 2.220446049250313e-16

x를 괄호로 묶습니다.

 
절약한 프로세서 시간에 10억을 곱해도 IMHO에 대해 논의한 시간보다 적습니다.
 
Alexey Navoykov :

Nikolai가 보어에 대해 옳았던 것 같습니다))

여기에서 개인적으로 나는 어디에서나 사람으로의 전환을 보지 못했습니다. 그리고 당신의 글에는 정말 많은 편지가 있지만 모든 것이 어떻게든 주제를 벗어나서 논쟁을 위해 논쟁하는 것처럼 느껴집니다.


 
LRA :
절약한 프로세서 시간에 10억을 곱해도 IMHO에 대해 논의한 시간보다 적습니다.

예, 동의합니다. 보낸 시간이 유감입니다. 사실입니다.

 
Nikolai Semko :

예, 동의합니다. 보낸 시간이 유감입니다. 사실입니다.

그때 왜 여기에 글을 올렸습니까? 나는 토론을 위해 생각했다, 나는 토론했다. 글쎄, 당신은 너무 짧지 않아도됩니다. 그러나 긴장을 늦추지 마십시오. 당신 앞에는 완전히 경작되지 않은 밭이 있습니다. https://www.mql5.com/en/docs/math . 행운을 빕니다 ))

Документация по MQL5: Математические функции
Документация по MQL5: Математические функции
  • www.mql5.com
Математические функции - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
pavlick_ :

다소 그럴싸해 보입니다. 나는 _round()를 실행했는데, compare_prices() 함수를 보여주는 것을 기억하십시오. 따라서 가격 모델을 찾는 스크립트가 있으며, 거기에서 compare_prices()가 매우 적극적으로 호출되는 것이 분명합니다. 결과:

결론이 전송됩니다. 실제 작업에서 호출의 사자 부분은 체크 인으로 끝납니다. 시간은 동일하며(Point의 차이 확인이 활성화된 상태에서) 작업 범위는 1.7 * 10^308에서 약 2 * 10^9(긴 경우에는 ^19)로 떨어졌습니다. 정도, 카트의 다섯 번째 바퀴로 라운드가 필요합니다). 글쎄, 나는 당신이이 기능을 어떻게 든 이국적으로 사용하는지 모릅니다 ...

추신:

x를 괄호로 묶습니다.


이해할 수 없습니다. 어떤 경우에 이 기능을 사용해야 합니까?

 // 0 - first is greater than second
// 1 - equal
// 2 - second is greater than first
uchar compare_prices( double first, double second)
{
   if (first - second >= _Point )
       return 0 ;
   if (second - first >= _Point )
       return 2 ;

   first = round (first/ _Point );
   second = round (second/ _Point );
   
   if (first > second)
       return 0 ;
   if (first < second)
       return 2 ;
   return 1 ;
}

if(first>second)를 사용하거나 결과(0,1 또는 2)를 원하면 왜 사용하지 않습니까?

 #define _compare_prices(f,s) (f>s)? 0 :(f<s)? 2 : 1 ;

반올림 함수가 필요하지 않기 때문입니다.

아니면 그냥 테스트용인가요?

 
Nikolai Semko :

아니요, 이것은 실제 기능입니다. 관심을 끌기 위해 내 개발을 대체했습니다. Nikolai, 글쎄, 나는 토론이 필요하지 않다는 것을 깨달았습니다. 이것으로 마치겠습니다.

 
pavlick_ :

아니요, 이것은 실제 기능입니다. 관심을 끌기 위해 내 개발을 대체했습니다. Nikolai, 글쎄, 나는 토론이 필요하지 않다는 것을 깨달았습니다. 이것으로 마치겠습니다.

파블릭_ :

그때 왜 여기에 글을 올렸습니까? 나는 토론을 위해 생각했다, 나는 토론했다. 글쎄, 당신은 너무 짧지 않아도됩니다. 그러나 긴장을 늦추지 마십시오. 당신 앞에는 완전히 경작되지 않은 밭이 있습니다. https://www.mql5.com/en/docs/math . 행운을 빕니다 ))

:) 불행하게도 이 주제에서 일어난 "일을 과시하는" 시간에 대해 유감스럽게 생각합니다. 건설적인 토론을 할 시간이 없습니다.
사유: