How we can compare double value ,when double value is nearly equal to zero?
I am using things like this:
#define isZero(x) ((fabs(x) < 0.000000001)
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( 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