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

 
Andrey Dik :
float는 이점이 없는 숫자의 거세입니다. 변환의 모든 손실을 더 잘 처리하고 가능한 가장 높은 정밀도인 double을 사용합니다.
고맙습니다. 내가 어디에서 실수했는지 알아 내려고 노력할 것입니다. 그 동안 float는 pah pah를 작동합니다. 시작한 일을 그만두는 데 익숙하지 않습니다. 그러나 이 실수로 인해 틀에 박힌 상태에서 벗어났습니다.
 
Vladislav Andruschenko :
고맙습니다. 내가 어디에서 실수했는지 알아 내려고 노력할 것입니다. 그 동안 float는 pah pah를 작동합니다. 시작한 일을 그만두는 데 익숙하지 않습니다. 하지만 이 실수가 나를 틀에서 벗어났다.
물론 이것은 마스터의 일이지만 모든 표준 수학 함수가 이중 숫자로 작동하고 이중 결과를 생성한다는 사실에주의하십시오. 이러한 함수를 부동 숫자에 적용할 때 어쨌든 내부적으로 double로 변환이 발생하므로 어떤 경우에도 얻은 결과의 정확성과 신뢰성을 잃게 됩니다.

개인적으로 나는 계산에 절대 사용하지 않으며 숫자를 비교할 때 차이를 최소 허용 값과 비교할 때 항상 16자리까지 가능한 가장 높은 정확도로 작업하고 맨 마지막 작업에서만 정규화를 수행합니다. double을 올바르게 처리하면 문제가 없습니다. 그렇게 하는 것이 좋습니다. 그렇지 않으면 일부 계산/변환 단계에서 정확도 손실 과 관련된 결과를 왜곡하는 미묘한 문제가 발생합니다.
 
Andrey Dik :
물론 이것은 마스터의 일이지만 모든 표준 수학 함수가 이중 숫자로 작동하고 이중 결과를 생성한다는 사실에주의하십시오. 이러한 함수를 부동 숫자에 적용할 때 어쨌든 내부적으로 double로 변환이 발생하므로 어떤 경우에도 얻은 결과의 정확성과 신뢰성을 잃게 됩니다.

개인적으로 나는 계산에 절대 사용하지 않으며 숫자를 비교할 때 차이를 최소 허용 값과 비교할 때 항상 16자리까지 가능한 가장 높은 정확도로 작업하고 맨 마지막 작업에서만 정규화를 수행합니다. double을 올바르게 처리하면 문제가 없습니다. 그렇게 하는 것이 좋습니다. 그렇지 않으면 일부 계산/변환 단계에서 정확도 손실 과 관련된 결과를 왜곡하는 미묘한 문제가 발생합니다.
자세한 답변 감사합니다.
 

2017년 가격 평가는 무조건 사실입니다.

나방이 아니라 분뇨...

 
Mikhail Dovbakh :

2017년 가격 평가는 무조건 사실입니다.

말해 주세요.
 

이것이 어떻게되어야하는지

double Averab=( Ask + Bid )/ 2 / _Point ;
double AUTOPRICE= MathFloor ( NormalizeDouble (Averab, 2 ) )* _Point ;
 
Taras Slobodyanik :

이것이 어떻게되어야하는지

double Averab= MathAbs ( Ask - Bid )/ 2 / _Point ;
double AUTOPRICE= MathFloor ( NormalizeDouble (Averab, 2 ) )* _Point ;


코드를 여러 번 변경했습니다.

나는 똑같이 했다. 실험을 통해 double과 int가 무엇인지 이해했지만 명시적 계산으로 필요한 것을 얻지 못했습니다.

첫 번째 줄은 당신이 제안한 것입니다

MathFloor ( NormalizeDouble (( Ask + Bid )/ Point , _Digits ) )* Point
2017.02 . 26 18 : 24 : 59.133 2017.01 . 02 00 : 03 : 00   Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: MathFloor = 2.10287
2017.02 . 26 18 : 24 : 59.133 2017.01 . 02 00 : 03 : 00   Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE    askP2= 105146 bidP2= 105141 Averab2= 105143.5000000000 AUTOPRICE= 1.0514300000
2017.02 . 26 18 : 24 : 59.133 2017.01 . 02 00 : 03 : 00   Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: FLOAT    askP= 105146 bidP= 105141 Averab= 105143.5000000000 AUTOPRICE= 1.0514299870
 

그래서 모든 것이 정확합니다 . 105143.5000000000 은 43으로 반올림되었습니다...

(46-41)/2=2.5 반내림 = 2

 
Taras Slobodyanik :

그래서 모든 것이 정확합니다 . 105143.5000000000 은 43으로 반올림되었습니다...

(46-41)/2=2.5 반내림 = 2


예,

그러나 다른 스프레드(2,3,4,5,6,7)에서는 반올림이 다르며 때로는 정확하지 않습니다. 문제는 이것입니다.

 
0에서 8까지 확인 모든 것이 정상입니다 ...