On Saturday, 29 June 2013 at 14:54:13 UTC, snow wrote:
On Saturday, 29 June 2013 at 14:20:05 UTC, Ali Çehreli wrote:
Not knowing whether it applies to your case, the following is one almost correct way of writing opCmp:

   int opCmp(ref const Vector3D vec) {
       return cast(int)(x != vec.x
                        ? x - vec.x
                        : (y != vec.y
                           ? y - vec.y
                           : z - vec.z));
   }

The reason I said "almost" is due to the usual floating point equality comparison warnings. Values that are supposed to be equal may not compare equal due to accumulated earlier floating point calculation errors.

Ali

Thats a cool way, thanks. But the exception is still coming.

Not for me, Ali's code works.

Both solutions  throw -1,0 or 1.

What do you mean "throw -1,0 or 1" ?

So my first solution should work, too. Sure that the exception is coming, because of the compare function?

Your code throws an exception for me, ali's doesn't. The only difference is the compare function. So *pretty* much sure, yes.

That said, in debug code, there *should* be an assert rather than a dumb range error. This requires an enhancement.

Reply via email to