价格!=价格? - 页 3

 
WHRoeder:
大量的计算,而不是简单的解决方案
简单与否是由它需要实现的代码决定的。
 
RaptorUK:

我找到了这个解决方案,它将双数变成了整数,以便于比较双数。. .

我也想出了一个创造性的解决方案,对我来说(到目前为止)比较价格很有效。

int ConvertToPoints (double _price) {
   double price_double = _price / Point;
   int price_int = MathRound(price_double);
      
   return (price_int);
}

我把价格提高到一个int,表示价格是以整数表示的点数。 因此。

ConvertToPoints(price) != ConvertToPoints(price)

不可能是真的。

 
来自stdlib.mq4的CompareDoubles() 是否被取消了这个讨论的资格?如果用于价格,它对我来说效果很好。
 
Ovo:
来自stdlib.mq4的CompareDoubles() 是否被取消了这个讨论的资格?如果用于价格,它对我来说很有效。
不合格吗?不合格,但它所做的只是比较是否相等。
 
Thirteen:
ConvertToPoints(price) != ConvertToPoints(price)

一个浮动的除法,浮动的加法,转换为int,函数调用(复制,跳转,返回=3,)*2都乘以2。(18) 而这是在假设除法和转换与其他操作相同的情况下--它们不是。


if (MathAbs(a - b) > Point / 2.)

一个减法,一个测试,1/2的否定(平均而言)和比较。(如果point/2是在init中完成的,并且ABS被IF所取代,则为3 1/2)

不要把事情搞得太复杂

由于四舍五入,可能会在相等时触发
if (a > b)
a肯定比b大
if (a - b > Point / 2.)
由于四舍五入,当a小于b时可能会触发
if (a >= b)
a肯定>=b
if (a - b > -Point/2.)
if (a > b -Point/2.)
if (a +Point/2. > b)
任何舍入错误都会触发
if (a != b)
绝对不等于
if (MathAbs(a - b) > Point / 2.)
 
WHRoeder:

一个浮动除法,浮动加法,转换为int,函数调用(复制,跳转,返回=3,)*2都乘以2。(18) 而这是在假设除法和转换与其他操作相当的情况下--它们不是。


一个减法,一个测试,1/2的否定(平均而言)和比较。(3 1/2,如果point/2是在init中完成的,并且ABS被IF所取代)

不要把事情搞得太复杂

2013.04.03 17:39:12 TestSpeed-CompareDbls USDJPY,M5: MathAbs(a - b) 9000000 times in 266 ms.


2013.04.03 17:39:11 TestSpeed-CompareDbls USDJPY,M5: ConvertToPoints 9000000 times in 1887 ms.

2013.04.03 17:46:02 TestSpeed-CompareDbls USDJPY,M5: Flat(price) 9000000 times in 3604 ms.

"MathAbs(a-b) "方法比ConvertToPoints()方法快约7倍,比我的 "Flat() "方法快近14倍

 
对于信息,使用MQL5,你可以重载标准运算符,这允许 实现 非常 优雅的解决方案。
 
我测试了(intRecord > price / point),结果是
      intCheck = price /point;
      if (intRecord > intCheck) continue;

2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPoint在3403毫秒中出现9999999次。

2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 99999999次,共2505 ms。

2013.04.04 14:27:40 TestSpeed-CompareDbls EURUSD,H4: intRecord > price /point 99999999次,共1712 ms。

但是第3个不可能,第2个(intRecord > intCheck)在比较前的intCheck中多了一个任务。


 
rfb:
我测试了(intRecord > price / point),结果是

2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPoint在3403毫秒中出现9999999次。

2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 99999999次,共2505 ms。

2013.04.04 14:27:40 TestSpeed-CompareDbls EURUSD,H4: intRecord > price /point 99999999次,共1712 ms。

但是第3个不可能,第2个(intRecord > intCheck)在比较前的intCheck中多了一个任务。


什么是intRecord ?
 
与 "int intCheck "相同,但在函数 前赋值,像其他变量一样。