mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 241 1...234235236237238239240241242243244245246247 새 코멘트 Ihor Herasko 2024.01.29 20:25 #2401 fxsaber #:이해하지 못합니다. 상황의 배경을 알았다면 이해했을지도 모르죠. 하지만 지금 상황에서는 맞는 것 같습니다. Denis Kirichenko 2024.01.29 20:58 #2402 amrali #:두 금액이 같다면 둘 중 어느 것이든 유효한 최소값입니다. MathMin(1, 1)을 생각해 보면 함수가 첫 번째(1) 또는 두 번째(1)를 반환하는지 여부는 다르지 않습니다. 따라서 0.0을 반환하는 것은 -0.0과 다르지 않습니다. 편집: 참고로 강조 표시된 두 표현식은 동일하지 않습니다. 제 동료 amrali의 의견에 동의합니다. 또한 MathMin() 네이티브 함수가 있다는 점도 덧붙이고 싶습니다. 또한 부호가 다른 0이 같다고 생각합니다. 제가 아는 한 그 알고리즘은 매우 간단합니다. 저는 이를 CustomMathMin() 함수에 복제했습니다. //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double positive_zero_val, negative_zero_val; positive_zero_val = 0.0; negative_zero_val = -0.0; // 1) -0.0 / 0.0 double native_min_val, custom_min_val; native_min_val = ::MathMin(negative_zero_val, positive_zero_val); custom_min_val = CustomMathMin(negative_zero_val, positive_zero_val); ::Print("\nArguments: -0.0, 0.0"); ::PrintFormat("Native min value = %0.2f", native_min_val); ::PrintFormat("Custom min value = %0.2f", custom_min_val); // 2) 0.0 / -0.0 native_min_val = ::MathMin(positive_zero_val, negative_zero_val); custom_min_val = CustomMathMin(positive_zero_val, negative_zero_val); ::Print("\nArguments: 0.0, -0.0"); ::PrintFormat("Native min value = %0.2f", native_min_val); ::PrintFormat("Custom min value = %0.2f", custom_min_val); } //+------------------------------------------------------------------+ //| Custom MathMin | //+------------------------------------------------------------------+ double CustomMathMin(double value1, double value2) { if(value1 < value2) return value1; return value2; } //+------------------------------------------------------------------+ 로그에 기록되어 있습니다: 2024.01.29 23:49:46.351 c11 (EURUSD,H1) Arguments: -0.0, 0.0 2024.01.29 23:49:46.351 c11 (EURUSD,H1) Native min value = 0.00 2024.01.29 23:49:46.351 c11 (EURUSD,H1) Custom min value = 0.00 2024.01.29 23:49:46.351 c11 (EURUSD,H1) 2024.01.29 23:49:46.351 c11 (EURUSD,H1) Arguments: 0.0, -0.0 2024.01.29 23:49:46.351 c11 (EURUSD,H1) Native min value = -0.00 2024.01.29 23:49:46.351 c11 (EURUSD,H1) Custom min value = -0.00 두 개의 동일한 숫자에서 알고리즘이 두 번째 숫자를 최소값으로 취한다는 것을 쉽게 알 수 있습니다. Документация по MQL5: Математические функции / MathMin www.mql5.com MathMin - Математические функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Nikolai Semko 2024.01.29 20:59 #2403 fxsaber #:이해하지 못합니다. Print(-0.0<0.0); // false Print(-0.0>0.0); // false Print(-0.0<=0.0); // true Print(-0.0>=0.0); // true Print(-0.0==0.0); // true 별거 아니야 그냥 -0.0==0.0. fxsaber 2024.01.29 21:05 #2404 Nikolai Semko #:특별한 것은 없습니다. 그냥 -0.0==0.0 저는 이 질문을 잘 알고 있기 때문에 프로그래밍 언어에서 수학적으로 동일한 함수가 서로 다른 결과를 생성한다는 것을 보여주기 위해 MathMin의 두 가지 변형을 모두 작성했습니다. template <typename T> T ToType( const double Num ) { union UNION { T Num1; double Num2; } Union; Union.Num2 = Num; return(Union.Num1); } void OnStart() { Print(ToType<long>(MathMin(-0.0, 0.0))); // 0 Print(ToType<long>(MathMin(0.0, -0.0))); // -9223372036854775808 } Nikolai Semko 2024.01.29 21:30 #2405 fxsaber #:저는 이 질문에 대한 이해도가 높기 때문에 프로그래밍 언어에서 수학적으로 동일한 함수가 다른 결과를 산출한다는 것을 보여주기 위해 두 가지 버전의 MathMin을 작성했습니다. template <typename T> T ToType( const double Num ) { union UNION { T Num1; double Num2; } Union; Union.Num2 = Num; return(Union.Num1); } void OnStart() { Print(ToType<long>(MathMin(-0.0, 0.0))); // 0 Print(ToType<long>(MathMin(0.0, -0.0))); // -9223372036854775808 } 0.0과 -0.0이라는 숫자에서 64비트가 모두 같지 않다는 사실은 분명합니다: 하지만 여전히 0.0 == -0.0 Base Convert: IEEE 754 Floating Point baseconvert.com Online IEEE 754 floating point converter and analysis. Convert between decimal, binary and hexadecimal Nikolai Semko 2024.01.29 21:31 #2406 Ihor Herasko #:<와 <= 기호가 다른 것 같습니다..... 동의 Alain Verleyen 2024.01.29 21:33 #2407 Nikolai Semko # :그렇다면 특이한 점은 무엇입니까? 숫자 0.0과 -0.0에서 모든 64 비트가 동일하지 않다는 사실은 분명합니다: MathMin()은 결정론적일 것으로 기대합니다. 따라서 두 인수가 같을 때 항상 같은 결과를 제공합니다. 그리고 어떤 인수가 첫 번째인지 두 번째인지에 따라 다른 결과가 나오지 않아야 합니다. fxsaber가 맞습니다. 이것이 문제입니다. Denis Kirichenko 2024.01.29 21:39 #2408 Alain Verleyen #:MathMin() 함수는 결정론적일 것으로 예상합니다. 따라서 두 인수가 같을 때 항상 동일한 결과를 제공합니다. 그리고 어떤 인수가 첫 번째인지 두 번째인지에 따라 다른 결과가 나오지 않아야 합니다.... 그리고 맞습니다. 두 개의 숫자가 같으면 두 번째 숫자가 반환됩니다. 위에 예시를 보여드렸습니다... Nikolai Semko 2024.01.29 21:41 #2409 Print(pow(0.0,0.0)); // 1.0 Print(pow(-0.0,-0.0)); // 1.0 Print(pow(-0.0,0.0)); // 1.0 Print(pow(0.0,-0.0)); // 1.0 Print(0.0*-0.0); // -0.0 Print(-0.0*-0.0); // 0.0 그리고 그것은 잘못된 것이 아닙니다. fxsaber 2024.01.29 21:49 #2410 Alain Verleyen #:MathMin() 함수는 결정론적일 것으로 예상합니다. 따라서 두 인수가 같을 때 항상 동일한 결과를 제공합니다. 어떤 인수가 첫 번째인지 두 번째인지에 따라 다른 결과가 나오지 않아야 합니다. fxsaber가 맞습니다. 이것이 문제입니다. 제 말이 맞습니다. 큰 코드에서 다른 결과를 얻는 어려운 문제가 발생할 수 있습니다. 그래서 이 스레드에서 커뮤니티에 알린 것입니다. 1...234235236237238239240241242243244245246247 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
이해하지 못합니다.
상황의 배경을 알았다면 이해했을지도 모르죠. 하지만 지금 상황에서는 맞는 것 같습니다.
두 금액이 같다면 둘 중 어느 것이든 유효한 최소값입니다. MathMin(1, 1)을 생각해 보면 함수가 첫 번째(1) 또는 두 번째(1)를 반환하는지 여부는 다르지 않습니다.
따라서 0.0을 반환하는 것은 -0.0과 다르지 않습니다.
편집: 참고로 강조 표시된 두 표현식은 동일하지 않습니다.제 동료 amrali의 의견에 동의합니다. 또한 MathMin() 네이티브 함수가 있다는 점도 덧붙이고 싶습니다. 또한 부호가 다른 0이 같다고 생각합니다. 제가 아는 한 그 알고리즘은 매우 간단합니다. 저는 이를 CustomMathMin() 함수에 복제했습니다.
로그에 기록되어 있습니다:
두 개의 동일한 숫자에서 알고리즘이 두 번째 숫자를 최소값으로 취한다는 것을 쉽게 알 수 있습니다.
이해하지 못합니다.
별거 아니야 그냥 -0.0==0.0.
특별한 것은 없습니다. 그냥 -0.0==0.0
저는 이 질문을 잘 알고 있기 때문에 프로그래밍 언어에서 수학적으로 동일한 함수가 서로 다른 결과를 생성한다는 것을 보여주기 위해 MathMin의 두 가지 변형을 모두 작성했습니다.
저는 이 질문에 대한 이해도가 높기 때문에 프로그래밍 언어에서 수학적으로 동일한 함수가 다른 결과를 산출한다는 것을 보여주기 위해 두 가지 버전의 MathMin을 작성했습니다.
0.0과 -0.0이라는 숫자에서 64비트가 모두 같지 않다는 사실은 분명합니다:
하지만 여전히 0.0 == -0.0
<와 <= 기호가 다른 것 같습니다.....
동의
그렇다면 특이한 점은 무엇입니까?
숫자 0.0과 -0.0에서 모든 64 비트가 동일하지 않다는 사실은 분명합니다:
MathMin()은 결정론적일 것으로 기대합니다. 따라서 두 인수가 같을 때 항상 같은 결과를 제공합니다. 그리고 어떤 인수가 첫 번째인지 두 번째인지에 따라 다른 결과가 나오지 않아야 합니다.
fxsaber가 맞습니다. 이것이 문제입니다.
MathMin() 함수는 결정론적일 것으로 예상합니다. 따라서 두 인수가 같을 때 항상 동일한 결과를 제공합니다. 그리고 어떤 인수가 첫 번째인지 두 번째인지에 따라 다른 결과가 나오지 않아야 합니다....
그리고 맞습니다. 두 개의 숫자가 같으면 두 번째 숫자가 반환됩니다. 위에 예시를 보여드렸습니다...
그리고 그것은 잘못된 것이 아닙니다.
MathMin() 함수는 결정론적일 것으로 예상합니다. 따라서 두 인수가 같을 때 항상 동일한 결과를 제공합니다. 어떤 인수가 첫 번째인지 두 번째인지에 따라 다른 결과가 나오지 않아야 합니다.
fxsaber가 맞습니다. 이것이 문제입니다.
제 말이 맞습니다. 큰 코드에서 다른 결과를 얻는 어려운 문제가 발생할 수 있습니다. 그래서 이 스레드에서 커뮤니티에 알린 것입니다.