mql5语言的特点、微妙之处以及技巧 - 页 143 1...136137138139140141142143144145146147148149150...247 新评论 Artyom Trishkin 2019.10.28 10:41 #1421 Alexey Viktorov: 你只是不应该期望,如果没有值,就一定是0,如果不是bool类型的 变量,就相应地是false。即使明确转换为bool也无济于事。 它这样工作没有错误。 老实说,我完全不明白零点是怎么来的。 const double Points = TickValue[0] ? Profit / (Lots * TickValue[0] * _Point) : 0; // zero divide TickValue[0]包含垃圾。它可能等于也可能不等于零。 如果TickValue[0]中的垃圾不等于零,那么我们计算Points = Profit / Lots * non-zero trash * _Point,否则,如果TickValue[0]中的垃圾等于零 - 我们将Points等同于零。 如果Lots在声明时被初始化为1,那么表达式Lots * non-zero rubbish * _Point 从哪里得到0? _Point中 是否有零? TheXpert 2019.10.28 10:43 #1422 fxsaber: 这个错误在事实上是很明显的。 好了,错误不清楚了。而且对我来说,它也没有再现。 fxsaber 2019.10.28 10:52 #1423 TheXpert: 好吧,这个错误让人无法理解。而且它不会在我身上繁殖。 粗略地说,调用这个函数可能会导致除以零。 // Неправильно написанная функция. double WrongFunc( const double Num ) { return(Num ? 1 / (0.1 * Num) : 0); } 我在报告库的实践中遇到了这个问题。然后我意识到这是符合逻辑的。 TheXpert 2019.10.28 11:00 #1424 fxsaber: 粗略地说,调用这个函数可以导致除以零。 我在border dubles上有这样的代码,但它没有崩溃 double f( const double Num ) { return(Num ? 1 / (0.1 * Num) : 0); } void OnStart() { Print(f(1 e-308)); // 2019.10.28 13:02:19.457 test (USDJPY,H1) inf } fxsaber 2019.10.28 11:04 #1425 TheXpert: 我在border dubles上得到同样的代码,但它没有崩溃。 #include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280 void OnStart() { double Num = 0; _W(Num) = (uchar)2; Print(WrongFunc(Num)); } TheXpert 2019.10.28 11:09 #1426 fxsaber: 这样的畏缩。 fxsaber 2019.10.28 11:27 #1427 TheXpert: 这样的崩溃。 综上所述,将两个非零的双子星相乘可以得到零。而这不是什么退化的情况,而是实践中的真实情况。 粗略地说,一个战斗的EA可以因为这个原因而中断,概率远远低于零。 TheXpert 2019.10.28 11:32 #1428 而检查零不会保存,无论是显性的还是隐性的(bool转换)。 fxsaber 2019.10.28 11:42 #1429 TheXpert: 而检查零不会保存,无论是显式还是隐式(bool转换)。 return(0.1 * Num ? 1 / (0.1 * Num) : 0); Igor Makanu 2019.10.28 11:56 #1430 fxsaber: 综上所述,将两个非零的双子星相乘可以得到零。而且这不是什么退化的情况,而是实际中的真实情况。 粗略地说,一个战斗的EA可以因为这个原因而中断,概率远远低于零。 关于NaN,你需要另外检查,很可能这段代码会工作http://qaru.site/questions/20557/checking-if-a-double-or-float-is-nan-in-c f != f 或限制精度,如CompareDoubles()的例子--似乎是在SBhttps://www.mql5.com/ru/docs/basis/types/double 1...136137138139140141142143144145146147148149150...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你只是不应该期望,如果没有值,就一定是0,如果不是bool类型的 变量,就相应地是false。即使明确转换为bool也无济于事。
它这样工作没有错误。
老实说,我完全不明白零点是怎么来的。
TickValue[0]包含垃圾。它可能等于也可能不等于零。
如果TickValue[0]中的垃圾不等于零,那么我们计算Points = Profit / Lots * non-zero trash * _Point,否则,如果TickValue[0]中的垃圾等于零 - 我们将Points等同于零。
如果Lots在声明时被初始化为1,那么表达式Lots * non-zero rubbish * _Point 从哪里得到0? _Point中 是否有零?
这个错误在事实上是很明显的。
好了,错误不清楚了。而且对我来说,它也没有再现。
好吧,这个错误让人无法理解。而且它不会在我身上繁殖。
粗略地说,调用这个函数可能会导致除以零。
我在报告库的实践中遇到了这个问题。然后我意识到这是符合逻辑的。
粗略地说,调用这个函数可以导致除以零。
我在border dubles上有这样的代码,但它没有崩溃
我在border dubles上得到同样的代码,但它没有崩溃。
这样的崩溃。
综上所述,将两个非零的双子星相乘可以得到零。而这不是什么退化的情况,而是实践中的真实情况。
粗略地说,一个战斗的EA可以因为这个原因而中断,概率远远低于零。
而检查零不会保存,无论是显式还是隐式(bool转换)。
综上所述,将两个非零的双子星相乘可以得到零。而且这不是什么退化的情况,而是实际中的真实情况。
粗略地说,一个战斗的EA可以因为这个原因而中断,概率远远低于零。
关于NaN,你需要另外检查,很可能这段代码会工作http://qaru.site/questions/20557/checking-if-a-double-or-float-is-nan-in-c
或限制精度,如CompareDoubles()的例子--似乎是在SBhttps://www.mql5.com/ru/docs/basis/types/double