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.