mql5语言的特点、微妙之处以及技巧 - 页 241 1...234235236237238239240241242243244245246247 新评论 Ihor Herasko 2024.01.29 21:25 #2401 fxsaber #:你拒绝理解。 如果我知道事情的来龙去脉,也许我会理解。但就目前的情况来看,这看起来是对的。 Denis Kirichenko 2024.01.29 21:58 #2402 amrali #:只要两个数额相等,其中任何一个都是有效的最小值。考虑一下 MathMin(1,1),函数返回的是第一个(1)还是第二个(1)并无区别。 因此,返回 0.0 与返回 -0.0并无不同。 编辑:顺便说一下,两个突出显示的表达式并不完全相同。 我同意 我的同事 amrali 的观点。我还想补充一点,有一个本地函数MathMin()。它也认为符号不同的零相等。据我所知,它的算法非常简单。我在我的 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 21: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 22: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 22: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 22:31 #2406 Ihor Herasko #:<和<=符号似乎不同..... 同意 Alain Verleyen 2024.01.29 22:33 #2407 Nikolai Semko # : 在数字 0.0 和 -0.0 中,并非所有 64 位都相同,这一点显而易见: 它希望 MathMin() 是确定的。因此,当两个参数相同时,总是给出相同的结果。而不是根据第一个或第二个参数的不同而给出不同的结果。 fxsaber 说得没错,这是个问题。 Denis Kirichenko 2024.01.29 22:39 #2408 Alain Verleyen #:它希望 MathMin() 函数是确定的。因此,当两个参数相同时,总是给出相同的结果。而不是根据参数是第一个还是第二个而得出不同的结果.... 确实如此。当两个数字相等时,返回第二个数字。我在上面举了一个例子... Nikolai Semko 2024.01.29 22: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 22:49 #2410 Alain Verleyen #:它希望 MathMin() 函数是确定的。因此,当两个参数相同时,总是给出相同的结果。而不是根据第一个或第二个参数的不同而给出不同的结果。fxsaber 说得没错,这是个问题。 你说对了。在大型代码中,你可能会遇到难以发现的获得不同结果的问题。这就是我在这个主题中通知社区的原因。 1...234235236237238239240241242243244245246247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你拒绝理解。
如果我知道事情的来龙去脉,也许我会理解。但就目前的情况来看,这看起来是对的。
只要两个数额相等,其中任何一个都是有效的最小值。考虑一下 MathMin(1,1),函数返回的是第一个(1)还是第二个(1)并无区别。
因此,返回 0.0 与返回 -0.0并无不同。
编辑:顺便说一下,两个突出显示的表达式并不完全相同。我同意 我的同事 amrali 的观点。我还想补充一点,有一个本地函数MathMin()。它也认为符号不同的零相等。据我所知,它的算法非常简单。我在我的 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 说得没错,这是个问题。
你说对了。在大型代码中,你可能会遇到难以发现的获得不同结果的问题。这就是我在这个主题中通知社区的原因。