opCmp / opEquals do not actually support partial orders

Dominikus Dittes Scherkl dominikus.scherkl at continental-corporation.com
Wed Jul 18 11:40:19 UTC 2018


On Tuesday, 17 July 2018 at 21:18:12 UTC, John Colvin wrote:
> On Tuesday, 17 July 2018 at 18:21:26 UTC, H. S. Teoh wrote:
>> But opCmp turns out to be a tarpit.  Here's why:
>>

>>   According to the original claim, it should also return 0, for
>>   "incomparable".  However, this leads to problems:
Indeed. And it doesn't make sense at all.

> Just do what std.typecons.Proxy does and return float.nan for 
> the incomparable case.

Yes, that's the only way. Having this 4th value of opCmp is 
necessary
for may types. In fact opCmp() it practically the only place 
where I
ever use the type "float", just to have the NaN.
If I really need floatingpoint arithmetic, I always use real (or 
at least double).

I would like to have a "signed boolean" type (with the values -1, 
0, 1 and NaN)
simply for all kind of sign operations. But ok, float is 32bit, 
and IEEE
suggests a "half" type (16bit). As a "signed boolean" would need 
a byte anyway
there is no too much to gain.



More information about the Digitalmars-d mailing list