NormalizeDouble을 사용하여 MT4에서 숫자 반올림 - 페이지 4 1234567891011...17 새 코멘트 Lilita Bogachkova 2016.02.22 08:26 #31 Dmitry Fedoseev : 0.6과 같기 때문에 0.5는 속임수로만 얻을 수 있습니다. double v1 = 1.1234567 ; 'v1'이 숫자를 삽입하면 'i = 2'까지 모든 것이 올바르게 반올림되었음을 알 수 있습니다. Dmitry Fedoseev 2016.02.22 08:28 #32 lilita bogachkova : 'v1'이 숫자를 삽입하면 'i = 2'까지 모든 것이 올바르게 반올림되었음을 알 수 있습니다. i=2 이후에 잘못된건가요? Lilita Bogachkova 2016.02.22 08:34 #33 Ihor Herasko : 하나의 부호만 정규화되면 모든 것이 간단합니다. 0, 1, 2, 3, 4 -> 0, 5, 6, 7, 8, 9 -> 1 두 자리가 정규화되면 0 - 49 -> 0 및 50 - 99 -> 1과 같은 두 자리 숫자가 고려됩니다. 결국 숫자 1.49를 정수로 반올림해야 하는 경우 실제로 다음을 얻어야 합니다. 2, 사용 가능한 49/1에 대해 최대 51/100은? 세 자리, 네 자리 등도 마찬가지입니다. 그러나 1.45는 2로 반올림되지만 이전에 더 높은 정밀도의 1제곱으로 정규화된 경우에만 가능합니다. void OnStart () { for ( int i= 7 ;i>= 0 ;i--) { double v1 = 1.4545454 ; double v2 = NormalizeDouble (v1,i+ 1 ); v1= NormalizeDouble (v1,i); v2= NormalizeDouble (v2,i); Print ( "v1 = " ,i, " = " , DoubleToString (v1, 7 ), ", v2 = " ,i, " = " , DoubleToString (v2, 7 )); } Print ( "---" ); } v1=0=1.0000000, v2=0=2.0000000 v1 = 1 = 1.5000000, v2 = 1 = 1.5000000 v1 = 2 = 1.4500000, v2 = 2 = 1.4600000 v1=3=1.4550000, v2=3=1.4550000 계산 중에 숫자가 더 높은 정확도로 정규화되고 후속 계산에서 이 숫자가 더 낮은 정확도로 정규화되면 단순히 정규화된 숫자와 정확도가 다른 결과를 얻습니다. Ihor Herasko 2016.02.22 09:16 #34 lilita bogachkova : 계산 중에 숫자가 더 높은 정확도로 정규화되고 후속 계산에서 이 숫자가 더 낮은 정확도로 정규화되면 단순히 정규화된 숫자와 정확도가 다른 결과를 얻습니다. 위에서 그러한 행동을 "mukhlezh"라고했습니다.)) 수학은 정확한 과학이지만 여전히 이해와 함께 적용되어야합니다. 2 + 3 = 5, 그러나 2개의 버킷과 3개의 닭이 있으면 5는 더 이상 작동하지 않습니다)) [삭제] 2016.02.24 07:44 #35 실례지만 원하는 값을 얻는 방법은 무엇입니까? 권장 기능을 사용하는 경우: - 한 경우에는 올바르게 반올림된 값을 얻습니다. 0.06-0.02 = NormalizeDouble (0.03999999999999999.2) = 0.04 나눗셈은 대략적으로 수행되며 정규화는 필수 불가결합니다. - 두 번째 경우에도 반올림되지만 이 경우에는 필요하지 않습니다. 0.06-0.024 = NormalizeDouble(0.036,2) = 0.04 여기서 정규화(반올림)가 필요하지 않습니다. 그러나 값을 반올림하지 않고 올바르게 정규화하려면 어떻게 해야 합니까? Ihor Herasko 2016.02.24 08:08 #36 Roman Starinskij : 실례지만 원하는 값을 얻는 방법은 무엇입니까? 이렇게 하려면 "원하는 값"이 무엇인지 공식화하는 것이 좋습니다.)) 권장 기능을 사용하는 경우: - 한 경우에는 올바르게 반올림된 값을 얻습니다. 0.06-0.02 = NormalizeDouble(0.03999999999999999.2) = 0.04 나눗셈은 대략적으로 수행되며 정규화는 필수 불가결합니다. - 두 번째 경우에도 반올림되지만 이 경우에는 필요하지 않습니다. 0.06-0.024 = NormalizeDouble(0.036,2) = 0.04 여기서 정규화(반올림)가 필요하지 않습니다. 그러나 값을 반올림하지 않고 올바르게 정규화하려면 어떻게 해야 합니까? 위의 예는 정규화의 "필요"를 결정하는 직관적인 알고리즘을 사용하고 있음을 보여줍니다. 첫 번째 경우에는 무한 분수가 발생하고 두 번째 경우에는 유한 분수가 발생합니다. 이 아래에서 실수를 원하는 형식으로 줄이는 알고리즘을 조정합니다. 가장 쉬운 방법은 필요한 계산 정확도를 미리 결정하는 것입니다. [삭제] 2016.02.24 13:23 #37 Ihor Herasko : 이렇게 하려면 "원하는 값"이 무엇인지 공식화하는 것이 좋습니다.)) 위의 예는 정규화의 "필요"를 결정하는 직관적인 알고리즘을 사용하고 있음을 보여줍니다. 첫 번째 경우에는 무한 분수가 발생하고 두 번째 경우에는 유한 분수가 발생합니다. 이 아래에서 실수를 원하는 형식으로 줄이는 알고리즘을 조정합니다. 가장 쉬운 방법은 필요한 계산 정확도를 미리 결정하는 것입니다. 계산기에 입력했던 것과 동일한 숫자를 얻으면 됩니다. :-) 이것은 원하는 값입니다. "0.06-0.02"에 대해 "0.04"를 얻고 "0.06-0.024"에 대해 "0.036"을 얻습니다. Dmitry Fedoseev 2016.02.24 13:29 #38 Roman Starinskij : 계산기에 입력했던 것과 동일한 숫자를 얻으면 됩니다. :-) 이것은 원하는 값입니다. "0.06-0.02"에 대해 "0.04"를 얻고 "0.06-0.024"에 대해 "0.036"을 얻습니다. 0.036(소수점 3자리)을 구해야 하는 경우 2가 아닌 3자리로 정규화해야 합니다. [삭제] 2016.02.24 16:08 #39 Dmitry Fedoseev : 0.036(소수점 3자리)을 구해야 하는 경우 2가 아닌 3자리로 정규화해야 합니다. 제가 틀렸습니다. 최대 3개의 문자를 정규화해야 합니다. 그렇게 할 수 있습니까? Dmitry Fedoseev 2016.02.24 16:33 #40 Roman Starinskij : 제가 틀렸습니다. 최대 3개의 문자를 정규화해야 합니다. 그렇게 할 수 있습니까? 코드는 다음과 같습니다. 0.06 - 0.024 = NormalizeDouble ( 0.036 , 2 ) = 0.04 2 대신 3을 넣으면 0.036이 됩니다. 1234567891011...17 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
0.6과 같기 때문에 0.5는 속임수로만 얻을 수 있습니다.
'v1'이 숫자를 삽입하면 'i = 2'까지 모든 것이 올바르게 반올림되었음을 알 수 있습니다.
'v1'이 숫자를 삽입하면 'i = 2'까지 모든 것이 올바르게 반올림되었음을 알 수 있습니다.
하나의 부호만 정규화되면 모든 것이 간단합니다. 0, 1, 2, 3, 4 -> 0, 5, 6, 7, 8, 9 -> 1
두 자리가 정규화되면 0 - 49 -> 0 및 50 - 99 -> 1과 같은 두 자리 숫자가 고려됩니다. 결국 숫자 1.49를 정수로 반올림해야 하는 경우 실제로 다음을 얻어야 합니다. 2, 사용 가능한 49/1에 대해 최대 51/100은?
세 자리, 네 자리 등도 마찬가지입니다.
그러나 1.45는 2로 반올림되지만 이전에 더 높은 정밀도의 1제곱으로 정규화된 경우에만 가능합니다.
v1=0=1.0000000, v2=0=2.0000000
v1 = 1 = 1.5000000, v2 = 1 = 1.5000000
v1 = 2 = 1.4500000, v2 = 2 = 1.4600000
v1=3=1.4550000, v2=3=1.4550000
계산 중에 숫자가 더 높은 정확도로 정규화되고 후속 계산에서 이 숫자가 더 낮은 정확도로 정규화되면 단순히 정규화된 숫자와 정확도가 다른 결과를 얻습니다.
계산 중에 숫자가 더 높은 정확도로 정규화되고 후속 계산에서 이 숫자가 더 낮은 정확도로 정규화되면 단순히 정규화된 숫자와 정확도가 다른 결과를 얻습니다.
실례지만 원하는 값을 얻는 방법은 무엇입니까?
권장 기능을 사용하는 경우:
- 한 경우에는 올바르게 반올림된 값을 얻습니다.
0.06-0.02 = NormalizeDouble (0.03999999999999999.2) = 0.04
나눗셈은 대략적으로 수행되며 정규화는 필수 불가결합니다.
- 두 번째 경우에도 반올림되지만 이 경우에는 필요하지 않습니다.
0.06-0.024 = NormalizeDouble(0.036,2) = 0.04
여기서 정규화(반올림)가 필요하지 않습니다.
그러나 값을 반올림하지 않고 올바르게 정규화하려면 어떻게 해야 합니까?
실례지만 원하는 값을 얻는 방법은 무엇입니까?
이렇게 하려면 "원하는 값"이 무엇인지 공식화하는 것이 좋습니다.))
권장 기능을 사용하는 경우:
- 한 경우에는 올바르게 반올림된 값을 얻습니다.
0.06-0.02 = NormalizeDouble(0.03999999999999999.2) = 0.04
나눗셈은 대략적으로 수행되며 정규화는 필수 불가결합니다.
- 두 번째 경우에도 반올림되지만 이 경우에는 필요하지 않습니다.
0.06-0.024 = NormalizeDouble(0.036,2) = 0.04
여기서 정규화(반올림)가 필요하지 않습니다.
그러나 값을 반올림하지 않고 올바르게 정규화하려면 어떻게 해야 합니까?
위의 예는 정규화의 "필요"를 결정하는 직관적인 알고리즘을 사용하고 있음을 보여줍니다. 첫 번째 경우에는 무한 분수가 발생하고 두 번째 경우에는 유한 분수가 발생합니다. 이 아래에서 실수를 원하는 형식으로 줄이는 알고리즘을 조정합니다.
가장 쉬운 방법은 필요한 계산 정확도를 미리 결정하는 것입니다.
이렇게 하려면 "원하는 값"이 무엇인지 공식화하는 것이 좋습니다.))
위의 예는 정규화의 "필요"를 결정하는 직관적인 알고리즘을 사용하고 있음을 보여줍니다. 첫 번째 경우에는 무한 분수가 발생하고 두 번째 경우에는 유한 분수가 발생합니다. 이 아래에서 실수를 원하는 형식으로 줄이는 알고리즘을 조정합니다.
가장 쉬운 방법은 필요한 계산 정확도를 미리 결정하는 것입니다.
0.036(소수점 3자리)을 구해야 하는 경우 2가 아닌 3자리로 정규화해야 합니다.
제가 틀렸습니다. 최대 3개의 문자를 정규화해야 합니다. 그렇게 할 수 있습니까?
제가 틀렸습니다. 최대 3개의 문자를 정규화해야 합니다. 그렇게 할 수 있습니까?
코드는 다음과 같습니다.
2 대신 3을 넣으면 0.036이 됩니다.