双打比较器 - MetaTrader 5 库
一个小类,用于以正确的方式比较浮点变量与所需的精度。
模板<类型名>班级浮点型 {民众: 浮点数() {精度(大小(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小时后评论,即可解锁附件下载
立即登录
