25.12.2017 10:40, drug пишет:
25.12.2017 09:50, Ali Çehreli пишет:
On 12/24/2017 02:10 AM, kerdemdemir wrote:

 >          if (  fabs(diff) < 0.00000001 )

I can't answer your question but I know that the comparison above is wrong because it can be meaningful only if the values are sufficiently larger than that hard-coded value.

I think feqrel() will be useful there:

   https://dlang.org/phobos/std_math.html#.feqrel

Ali

I'd do something like that (disclaimer - from memory):
```
     int opCmp( T rhs ) const {
         auto diff = curVal - rhs;
     auto epsilon = max(curVal.epsilon, rhs.epsilon);
         if (  fabs(diff) < epsilon )
             return 0;
         else if ( diff < 0 )
             return -1;
         else
             return 1;
     }
```
so in this case epsilon is also floating.

should be
 ```
      int opCmp( T rhs ) const {
          auto diff = curVal - rhs;
          // get error for curVal and rhs
          auto epsilon = max(curVal.epsilon * curVal, rhs.epsilon * rhs);
          if (  fabs(diff) < epsilon )
              return 0;
          else if ( diff < 0 )
              return -1;
          else
              return 1;
      }
 ```

Reply via email to