mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 158

 

약 10e60의 큰 값과 1e-40과 같은 작은 값으로 채워진 행렬이 있습니다. 그리고 그러한 계획에 대한 코드가 있습니다

      for(k=-16;k<=16;++k)
      {
        double Tmp1=(double)(DoubleToString(Matrix[i][j],k));
        double Tmp2=(double)((string)Matrix[i][j]);
        if(Tmp1==Tmp2)
          break;
      }
대략 27%의 경우 k=-15. 다른 경우에는 k=-16입니다. 따라서 질문: (string)Matrix[i][j] 연산을 보다 엄격한 변환 함수로 대체할 수 있습니까? 아니면 소수 자릿수를 잘라내는 기능이 있습니까? NormalizeDouble 이 옳지 않고 1.12345678e-40을 0으로 자르지만 쉼표 뒤에 잘라내고 싶었습니다. 아니면 (문자열)으로의 변환이 그 자체로 살아있고 함수로 표현되지 않습니까? 고맙습니다.
 
traveller00 :

차이 계수.

 
fxsaber :

차이 계수.

좀 더 구체적으로 말씀해주실 수 있나요? 아마도 코드 예제와 함께? 무엇과 무엇의 차이점은 무엇입니까?

결론은 이러한 이중 변환 (double)((string)Matrix[i][j]); 쉼표 뒤의 제어되지 않은 수의 문자를 자릅니다. 한편으로는 이 컷오프 = 반복할 수 있고 다른 한편으로는 이 문자 수를 제어하고 싶습니다.

 
traveller00 :

좀 더 구체적으로 말씀해주실 수 있나요? 아마도 코드 예제와 함께? 무엇과 무엇의 차이점은 무엇입니까?

 if ( MathAbs (Value1 - Value2) < Epsilon)
 

아, 이해합니다. 아니요, 질문이 조금 다릅니다. 여기에서의 비교는 (double)((string)Matrix[i][j]); DoubleToString 을 통해 변환합니다. 사실, 과제는 비교하는 것이 아닙니다. 그러나 그러한 이중 변환을 통해 정확도가 약간 재설정됩니다. 그리고 한편으로는 (문자열) 절단을 반복할 수 있고 다른 한편으로는 DoubleToString 과 같이 절단 정확도를 제어하고 싶습니다.

음, 부수적인 질문으로, 이러한 개종은 실제로 다르게 이루어지고 그들 자신의 분리되고 관련되지 않은 삶을 살고 있습니까?

 
traveller00 :

아, 이해합니다. 아니요, 질문이 조금 다릅니다. 여기에서의 비교는 (double)((string)Matrix[i][j]); DoubleToString 을 통해 변환합니다. 사실, 과제는 비교하는 것이 아닙니다. 그러나 그러한 이중 변환을 통해 정확도가 약간 재설정됩니다. 그리고 한편으로는 (문자열) 절단을 반복할 수 있고 다른 한편으로는 DoubleToString 과 같이 절단 정확도를 제어하고 싶습니다.

음, 부수적인 질문으로, 이러한 개종은 실제로 다르게 이루어지고 그들 자신의 분리되고 관련되지 않은 삶을 살고 있습니까?

NormalizeDoubleDoubleToString이 당신을 만족시키지 못하는 이유가 무엇인지 명확하지 않습니다. 원하는 정확도가 있습니까? 아니면 어떤 종류의 정확도를 원하지만 무엇을 모릅니다.

 

작업이 완전히 투명하지 않다는 데 동의합니다. 시험을 위해 일종의 목발을 조립하려고 하기 때문입니다.

숫자 1.0123456789e-50이 있다고 가정해 보겠습니다. 다음과 같이 약간의 정밀도로 반올림해야 합니다.

1. 기본적으로 (문자열)을 통한 이중 변환으로 작동합니다.

2. 원하는 경우 정확도를 제어할 수 있습니다.

여기에서 NormalizeDouble 은 적합하지 않으며 단순히 이 숫자를 0으로 만듭니다. DoubleToString 에서는 1단계의 결과를 반복할 수 없습니다.

작업은 다음 질문에서 성장합니다. 위에서 썼듯이 매트릭스가 있습니다. 이 행렬의 역행렬이 계산됩니다. 때때로(배정밀도 제한으로 인한 오류로 인해) 행렬이 퇴화되어 역행렬을 계산하는 것이 불가능합니다. 그러나 정확도가 약간 줄어들면 역수를 여전히 계산할 수 있습니다. 그래서 나는 결과가 일반적으로 진실과 유사한 한 테스트를 실행하고 통계를 수집하고 싶었습니다. (문자열) 을 통한 이중 변환은 대부분의 경우 문제를 해결합니다. 그러나 때로는 이것으로 충분하지 않으며 정확도를 얼마나 줄일 수 있는지 제어할 수 있기를 원합니다. DoubleToString 은 -16에서 16까지의 정밀도 열거를 사용하더라도 대부분의 경우 문제를 해결하지 못합니다.

 

말해 주세요.

표시기에서 예를 들어 시리즈의 순서입니다. close[]는 ArraySetAsSeries()에 의해 한 번 또는 다른 방법으로 설정됩니까?

이것은 OnCalculate()에서 수행됩니까 아니면 OnInit()에서 수행할 수 있습니까?

나는 이상한 상황에 빠졌습니다.

첫 번째 틱에 진입할 때 AS_SERIES에 의해 설정된 close[]의 순서는 자연스럽게 다음 틱에서 정상으로 변경됩니다. !AS_SERIES.

코드에서 무엇과 연결되어 있는지 찾지 못했습니다.

 
Yurixx :

말해 주세요.

표시기에서 예를 들어 시리즈의 순서입니다. close[]는 ArraySetAsSeries()에 의해 한 번 또는 다른 방법으로 설정됩니까?

이것은 OnCalculate()에서 수행됩니까 아니면 OnInit()에서 수행할 수 있습니까?

나는 이상한 상황에 빠졌습니다.

첫 번째 틱에 진입할 때 AS_SERIES에 의해 설정된 close[]의 순서는 자연스럽게 다음 틱에서 정상으로 변경됩니다. !AS_SERIES.

코드에서 무엇과 연결되어 있는지 찾지 못했습니다.

그리고 OnInit()에서는 close[] 배열을 볼 수 없습니다. 그리고 다른 OnCalculate() 미리 정의된 매개 변수 는 없습니다.

따라서 출력은 OnCalculate()에서만 가능합니다.

 
Artyom Trishkin :

그리고 OnInit()에서는 close[] 배열을 볼 수 없습니다. 그리고 다른 OnCalculate() 사전 정의된 매개변수는 없습니다.

따라서 출력은 OnCalculate()에서만 가능합니다.

나는 같은 결론에 이르렀다. )))

이 순서를 한 번 설정하는 것으로 충분한지 또는 매 틱마다 수행되어야 하는지 여부를 알아내는 것이 남아 있습니다.