错误、漏洞、问题 - 页 2820

 
Kira27:

证书让我感到困惑))))。

参考文献中说,不加倒装逗号。所以你把自己放在那里。

 
一个大胡子的问题。但我不明白这个结果。
void OnStart()
{
  Print(NormalizeDouble(1.79435, 5) == 1.79435); // false  
}
 
fxsaber:
大胡子的问题。但我不明白这个结果。

有人说过100次:"不要用精确的配音比较,要用ε"。包括在我们的文件中。

甚至0.3或0.7都无法与你的认知相比。接受它并克服它。或者去学习(例如在MTI)。

 
Slava:

有人说过100次:"不要用精确的配音比较,要用ε"。包括在我们的文件中。

当然,我知道如何进行配音比较。

甚至0.3或0.7都无法与你的认知相比。接受它并克服它。或者去学习(比如说在MTI)。

Print(NormalizeDouble(0.3, 5) == 0.3); // true
Print(NormalizeDouble(0.7, 5) == 0.7); // true

Print(NormalizeDouble(0.12345, 5) == 0.12345); // true

你不明白这个问题。

 
十进制会使它更容易,但它很慢(
 
fxsaber:

当然,我可以做一个配音的比较。

你不明白这个问题。

还有其他一些微妙之处。

一个实数乘以0.5可能无法与同一数字除以2.0相比。

 
Slava:

还有其他一些微妙之处。

一个实数乘以0.5可能不等于同一个数字除以2.0。

这倒是真的。但问题是,为什么1.79435这个数字没有被规范到小数点后5位?


ZS 这个问题的背景。

测试仪中的 "SL "响了。DEAL_PRICE = 1.79435, ORDER_PRICE_OPEN = 0(如MT5), DEAL_COMMENT = "sl 1.79435".

我想知道我在执行SL时是否有滑落?所以我简单地比较了DEAL_PRICE和评论中的价格。用我的眼睛看,价格是一样的,但MQL显示它们是不一样的。终于找到了原始对比的底细。

关于交易、自动交易系统和策略测试的论坛

错误、漏洞、问题

fxsaber, 2020.08.10 09:04

void OnStart()
{
  Print(NormalizeDouble(1.79435, 5) == 1.79435); // false  
}
 
fxsaber:

都是真的。但问题是,为什么1.79435这个数字没有正常化到小数点后第五位?


ZS问题的背景。

测试仪中的SL被触发了。DEAL_PRICE = 1.79435, ORDER_PRICE_OPEN = 0(如MT5), DEAL_COMMENT = "sl 1.79435".

我想知道我在执行SL时是否有滑落?所以我简单地比较了DEAL_PRICE和评论中的价格。用我的眼睛看,价格是一样的,但MQL显示它们是不一样的。最后到了最初的比较。

对不起,但听到你这么说有点奇怪。


 
Alexey Viktorov:

我很抱歉,但听到你这么说有点奇怪。

我重复我的问题。

fxsaber:

为什么1.79435这个数字没有规范化到小数点后第五位?

void OnStart()
{
  const double Norm = NormalizeDouble(1.79435, 5);
  
  Print((double)(string)Norm == Norm);    // false
  Print((double)(string)Norm == 1.79435); // true
}
 
fxsaber:

都是真的。但问题是,为什么1.79435这个数字没有正常化到小数点后第五位?

正常化不是四舍五入。

@Slava 写道,double的内部表述是不同的。

#define  PRINT(EX) Print(#EX," = ",EX)
//+------------------------------------------------------------------+
void OnStart()
{
   union ULONG_DOUBLE
   {
      double d_value;
      ulong ul_value;
   }tmp;
   double NORM_DOUBLE   = NormalizeDouble(1.79435, 5);
   double CONST_DOUBLE  = 1.79435;
   
   PRINT(NORM_DOUBLE);
   tmp.d_value = NORM_DOUBLE;
   PRINT(LongToHex(tmp.ul_value));
   
   tmp.d_value = CONST_DOUBLE;
   PRINT(CONST_DOUBLE);
   PRINT(LongToHex(tmp.ul_value));
}
//+------------------------------------------------------------------+
string LongToHex(const ulong value)
{
   return(StringFormat("%llX", value));
}
//+------------------------------------------------------------------+

2020.08.10 13:33:37.737 tst_normalize (EURUSD,H1) NORM_DOUBLE = 1.79435

2020.08.10 13:33:37.737 tst_normalize (EURUSD,H1) LongToHex(tmp.ul_value) = 3FFCB5A858793DDA

2020.08.10 13:33:37.737 tst_normalize (EURUSD,H1) CONST_DOUBLE = 1.79435

2020.08.10 13:33:37.737 tst_normalize (EURUSD,H1) LongToHex(tmp.ul_value) = 3FFCB5A858793DD9


SZS:@Nikolai Semko 有一篇很好的帖子,他对double的工作描述得非常好,也许我会找到链接。

UPD:https://www.mql5.com/ru/forum/1111/page2623#comment_14473837