Double 대 FLOAT - 이해할 수 없는 MathFloor 오류 - 페이지 2

 
       float AUTOPRICE;
       float askP= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
       float bidP= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );
       float Averab=((askP+bidP))/ 2.0 ;
      AUTOPRICE= MathFloor (Averab)* Point ;
       Print ( "FLOAT  " + "  askP=" +askP+ " bidP=" +bidP+ " Averab=" + DoubleToString (Averab, 10 )+ " AUTOPRICE=" + DoubleToString (AUTOPRICE, 10 ));

       double AUTOPRICE2;
       double askP2= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
       double bidP2= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );
       double Averab2=((askP2+bidP2))/ 2.0 ;
      AUTOPRICE2= MathFloor (Averab2)* Point ;
       Print ( "DOUBLE  " + "  askP2=" +askP2+ " bidP2=" +bidP2+ " Averab2=" + DoubleToString (Averab2, 10 )+ " AUTOPRICE=" + DoubleToString (AUTOPRICE2, 10 ));

퍼짐:2

2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105143 bidP2=105141 Averab2=105142.0000000000 AUTOPRICE= 0.05004

2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE= 1.05144199




퍼짐:3

2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE= 0.05004

2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE= 1.05144199


퍼짐:4

2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105145 bidP2=105141 Averab2=105143.0000000000 AUTOPRICE= 0.05004

2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE= 1.0514299

퍼짐:5

2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE= 1.005004

2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE= 1.0514299


 
문제를 지정하기 위해 주제의 이름을 변경했습니다.
 
Vladislav Andruschenko :

2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105145 bidP2=105141 Averab2=105143.0000000000 AUTOPRICE= 0.05004

결과가 맞습니다. 평균2 < 105143.

 
fxsaber :

결과가 맞습니다. 평균2 < 105143.

왜요? Averab2= 105143.0000000000 이 있기 때문에

 
Vladislav Andruschenko :

왜요? Averab2= 105143.0000000000 이 있기 때문에

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

Double 대 FLOAT - 이해할 수 없는 MathFloor 오류

fxsaber , 2017.02.26 08:27

이중 숫자를 인쇄하는 것은 아무 것도 아닙니다. 실제 double 값을 인쇄하려면 해당 바이트를 확인해야 합니다.

 
Vladislav Andruschenko :

왜요? Averab2= 105143.0000000000 이 있기 때문에

왜냐하면 https://www.mql5.com/ru/docs/math/mathfloor
 
fxsaber :

나는 당신을 이해했다. 감사합니다. 하지만 그것은 인쇄물에 관한 것입니다.

그러나 코드 내부의 실제 값은 출력 후와 동일합니다. 나는 그것을 여러 번 확인했다

이해합니다,

그 두 배 1 = 1.00000000000000000000000112123515;

등.

:-( 좋아, 가장 중요한 것은 문제가 float로 해결된다는 것입니다.

 
Andrey F. Zelinsky :
왜냐하면 https://www.mql5.com/ru/docs/math/mathfloor

105143

MathFloor( 105143 ) = 105142 이후

105143.00000000000000000000001 경우에도

그러나 나는 당신이 말하는 것을 이해한다고 생각합니다.

비록 아니지만

Print ( 2 +" MathFloor ="+ MathFloor ( 2 ));

2 MathFloor = 2



왜 MathFloor( 105143 ) = 105142 나는 이해할 수 없다 ...

 
Vladislav Andruschenko :

그땐 왜...

왜냐하면 https://www.mql5.com/ru/docs/convert/normalizedouble
 
Vladislav Andruschenko :

왜 MathFloor( 105143 ) = 105142 나는 이해할 수 없다 ...

#define TOSTRING(A) #A + " = " + ( string )(A) + " "

void OnStart ()
{
   double Price1 = 105143 ;
   double Price2 = Price1 - 1 e- 11 ;

   Print (TOSTRING(Price1) + TOSTRING( MathFloor (Price1)) +
        TOSTRING(Price2) + TOSTRING( MathFloor (Price2)) +
        TOSTRING(Price1 > Price2));
}
결과
Price1 = 105143.0 MathFloor (Price1) = 105143.0 Price2 = 105143.0 MathFloor (Price2) = 105142.0 Price1>Price2 = true

문자 그대로 이중 숫자를 인쇄하지 마십시오. float로 전환하는 것은 훨씬 더 많은 함정입니다.