가격 수 != 가격 ? - 페이지 3

 
WHRoeder :
간단한 솔루션 대신 많은 계산에서
단순 여부는 구현해야 하는 코드에 따라 결정됩니다. . .
 
RaptorUK :

double 을 비교하기 위해 double 을 int 로 바꾸는 이 솔루션에 도달했습니다. . .

나 역시 가격 비교를 위해 (지금까지) 나를 위해 일한 창의적인 솔루션을 생각해 냈습니다.

 int ConvertToPoints ( double _price) {
   double price_double = _price / Point ;
   int price_int = MathRound (price_double);
      
   return (price_int);
}

가격을 정수로 표현되는 포인트로 나타내는 int로 가격을 상향 조정합니다. 따라서:

ConvertToPoints(price) != ConvertToPoints(price)

결코 사실이 될 수 없습니다.

 
stdlib.mq4의 CompareDoubles() 가 이 토론에서 제외되었습니까? 가성비로 사용하면 괜찮습니다.
 
Ovo :
stdlib.mq4의 CompareDoubles() 가 이 토론에서 제외되었습니까? 가성비로 사용하면 괜찮습니다.
실격? 아니요, 하지만 그것이 하는 모든 일은 평등을 위한 비교입니다.
 
Thirteen :
ConvertToPoints(price) != ConvertToPoints(price)

부동 나누기, 부동 더하기, int로 변환, 함수 호출(복사, 점프, 반환 = 3,) * 2 모든 곱하기 2. (18) 그리고 그것은 나누기 및 변환이 다른 작업과 동등하다고 가정합니다. 그렇지 않습니다.


 if ( MathAbs (a - b) > Point / 2 .)

하나의 빼기, 하나의 테스트, 1/2 부정(평균) 및 비교. (point/2가 init에서 완료되고 ABS가 IF로 대체된 경우 3 1/2)

너무 복잡하게 생각하지 마세요

반올림으로 인해 같을 때 트리거될 수 있음
 if (a > b)
확실히 b보다 크다
 if (a - b > Point / 2 .)
반올림으로 인해 b보다 작을 때 트리거될 수 있음
 if (a >= b)
a는 확실히 >= b
 if (a - b > - Point / 2 .)
if (a > b - Point / 2 .)
if (a + Point / 2 . > b)
모든 반올림 오류에서 트리거됩니다.
 if (a != b)
확실히 평등하지 않다
 if ( MathAbs (a - b) > Point / 2 .)
 
WHRoeder :

부동 나누기, 부동 더하기, int로 변환, 함수 호출(복사, 점프, 반환 = 3,) * 2 모든 곱하기 2. (18) 그리고 그것은 나누기 및 변환이 다른 작업과 동등하다고 가정합니다. 그렇지 않습니다.


하나의 빼기, 하나의 테스트, 1/2 부정(평균) 및 비교. (point/2가 init에서 완료되고 ABS가 IF로 대체된 경우 3 1/2)

너무 복잡하게 생각하지 마세요

2013.04.03 17:39:12 TestSpeed-CompareDbls USDJPY,M5: MathAbs(a - b) 266ms에서 9000000회.


2013.04.03 17:39:11 TestSpeed-CompareDbls USDJPY,M5: 1887ms 동안 9000000회 ConvertToPoints.

2013.04.03 17:46:02 TestSpeed-CompareDbls USDJPY,M5: 3604ms에서 Flat(price) 9000000배.

"MathAbs(ab)" 방법은 ConvertToPoints() 방법보다 약 7배 빠르며 내 "Flat()" 방법보다 거의 14배 빠릅니다.

 
정보를 위해 MQL5를 사용하면 표준 연산자를 오버로드 할 수 있으므로 매우 우아한 솔루션 을 구현할 있습니다.
 
나는 (intRecord > 가격 / 포인트)를 테스트했고
      intCheck = price /point;
       if (intRecord > intCheck) continue ;

2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPoint 99999999회(3403ms).

2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 2505ms 동안 99999999회.

2013.04.04 14:27:40 TestSpeed-CompareDbls EURUSD,H4: intRecord > 가격/포인트 99999999번 1712ms.

그러나 세 번째 것은 현실적으로 불가능하고 두 번째 것(intRecord > intCheck)은 비교 전에 intCheck에 대해 1개 더 할당했습니다.


 
rfb :
나는 (intRecord > 가격 / 포인트)를 테스트했고

2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPoint 99999999회(3403ms).

2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 2505ms 동안 99999999회.

2013.04.04 14:27:40 TestSpeed-CompareDbls EURUSD,H4: intRecord > 가격/포인트 99999999번 1712ms.

그러나 세 번째 것은 현실적으로 불가능하고 두 번째 것(intRecord > intCheck)은 비교 전에 intCheck에 대해 1개 더 할당했습니다.


intRecord 란 무엇입니까?
 
"int intCheck"와 같지만 다른 변수와 마찬가지로 함수 앞에 값이 할당됩니다.