Download MetaTrader 5
To add comments, please log in or register
Publish your application in Cobe Base. Millions of traders will see it!
Abhishek Mishra
49
Abhishek Mishra 2015.08.07 06:05 

Hello

 

How we can compare double value ,when double value is nearly equal to zero?

Please Help. 

Carl Schreiber
5927
Carl Schreiber 2015.08.07 06:43  

I am using things like this:

#define isZero(x) ((fabs(x) < 0.000000001)
whroeder1
13592
whroeder1 2015.08.07 13:07  
Mideel
74
Mideel 2015.08.07 14:57  
just like that
JD4
1101
JD4 2015.08.07 19:28  
Standard numerical comparisons ( >, <, == (logical) <=, >=, and so on) should work.  If you are not getting enough precision with double, then I think you are stuck, because it is even higher precision than float, according to this page.
whroeder1
13592
whroeder1 2015.08.09 12:35  

The problem has nothing to do with precision (float vs double.)

The comparators work fine. The problem is with the equals. Is the equality important?

If you code Bid > trigger, is it OK for that to be true when Bid and Trigger are the same price? If you code Bid >= trigger, is it OK for it to be true when Bid is slightly below Trigger because of round off?

//        1        2        3        4        5        6        7        8        9       10
double t=1/10.0 + 1/10.0 + 1/10.0 + 1/10.0 + 1/10.0 + 1/10.0 + 1/10.0 + 1/10.0 + 1/10.0 + 1/10.0;
Print(t,"=1.0?",t==0); // 0.9999999999999999=1.0?false
If neither can be true, the equality is important, and you must understand The == operand. - MQL4 forum You can NOT use NormalizeDouble because that will not work on metals, (point != ticksize,) and NormalizeDouble uses Digits.
if( Bid - trigger >  0          ) // Bid >  trigger or possibly Bid == trigger
if( Bid > trigger               ) // equivalent.

if( Bid - trigger >  ticksize/2 ) // Bid >  trigger
if( Bid - trigger > -ticksize/2 ) // Bid >= trigger
/
To add comments, please log in or register