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

 

모든 장애물을 뛰어 넘고 모든 솔루션을 시도한 사람들을 위해 여기에 내가 나 자신을 위한 매우 안정적인 솔루션으로 쓴 내용이 있습니다.

여전히 솔루션을 찾고 있다면 다음과 같은 것을 발견했음을 의미합니다.

107.123111111 및 107.123999를 비교하면 이중 반올림 분산의 결과로 107.12 3 이 10712 4 와 비교됩니다.

다음은 비교에서 이중 반올림 분산을 제거 하기 위해 +1과 -1의 범위를 무시하는 이 문제에 대한 내 솔루션입니다.


이 시도:

       // double compare by leoa451
         int CompDoubleE0L1M2( double DoubleA, double DoubleB, int PointsToCompare)
      {
         int IntForDoubleA = ( int )( MathFloor ( MathPow ( 10 ,PointsToCompare) * DoubleA));
         int IntForDoubleB = ( int )( MathFloor ( MathPow ( 10 ,PointsToCompare) * DoubleB));
         
         if (IntForDoubleA >= IntForDoubleB- 1 && IntForDoubleA <= IntForDoubleB+ 1 ) { return 0 ; }         // if doubleA within +1/-1 range of doubleB (to compensate for the double rounding veriance)
         else if (IntForDoubleA < IntForDoubleB) { return 1 ; }                                           // if doubleA < doubleB
         else if (IntForDoubleA > IntForDoubleB) { return 2 ; }                                           // if doubleA > doubleB
         else return - 2 ;                                                                                 // error
      }
 

그리고 단순히 두 개의 double을 비교하고 bool 결과가 필요한 경우 또 다른 솔루션이 있습니다.

 // return true if same double value within digits comparison
bool CompareDoubleEqual( double a, double b, int digits)
{
   if ( MathAbs (a - b) > MathPow ( 10 , -digits))
       return ( false );

   return ( true );
}
 
Dretta : 그리고 단순히 두 개의 복식을 비교하고 bool 결과가 필요한 경우 또 다른 솔루션이 있습니다.
  1. 포인트 차이가 나면 true를 반환합니다. 어느 것이 잘못된 것입니까? 그들은 동등하지 않습니다.

  2. 단순화

     bool CompareDoubleEqual( double a, double b, int digits)
    {
       return MathAbs (a - b) < MathPow ( 10 , -digits) ;
    }
    손절매 후 주문 증가 - MQL4 프로그래밍 포럼 #1.3 2017.05.29