欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

双打比较器 - MetaTrader 5 库

author emer | 700 人阅读 | 0 人评论 |

一个小类,用于以正确的方式比较浮点变量与所需的精度。

模板<类型名>班级浮点型
  {民众:
                     浮点数() {精度(大小(T));}
  整数               比较(常量TX,常量y) {返回(((晶圆厂(x-y)<分钟))?0:((x-y>=最小值))?1:-1);}
  空白              精确(整数位数){分钟=战俘10,-晶圆厂(数字));}受保护的:
  双倍的            分钟;
  };

假设您有两个值为 1.15 的双打。

当你比较它们时,你期望它们是相等的。

但计算机中的双打行为却很奇怪。

1.15 可以存储为 1.14999999999。

所以比较会辜负你的期望。

比较浮点变量的正确方法是检查它们与某个最小值的减法。

FlatingPoint 必须使用 double 或 float 数据类型进行初始化。

如果 x = y,比较器方法返回 0; 1 如果 x > y;如果 x < y,则为 -1。

精度可以改变。

对于双精度数,默认精度为 fp 之后的 8 位数字;对于浮点数,默认精度为 4 位。

FloatingPoint 类使用示例。

空白 启动时()
  {
   浮点<双倍的>fp;
  双倍的一个=1.15,b=1.14999999999;
  为了整数我=15;我>5;我--)
     {
      fp.Precision(i);
      整数比较=fp.比较(a,b);
      细绳资源=(比较==0)?”=:(比较==1)?”>”“<”;
      打印格式“%g %s %g,%d 位精度”,a,res,b,i);
     }
  }

输出:

/**
   你不希望这样:
      1.15 > 1.15(15 位精度)
      1.15 > 1.15(14 位精度)
      1.15 > 1.15(13 位精度)
      1.15 > 1.15(12 位精度)
      11 位精度时 1.15 > 1.15
   
   你期望这样:
      1.15 = 1.15(10 位精度)
      9 位精度时 1.15 = 1.15
      8 位精度时 1.15 = 1.15
      7 位精度时 1.15 = 1.15
      6 位精度时 1.15 = 1.15
/**/




附件下载

📎 floatingpoint.mq5 (1.05 KB)

📎 floatingpoint.mqh (1.14 KB)

Source: MQL5 #29615

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录