ProtoObject and comparison for equality and ordering

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed May 15 00:37:25 UTC 2019


On 5/14/19 1:24 AM, Seb wrote:
> On Wednesday, 15 May 2019 at 00:08:10 UTC, Andrei Alexandrescu wrote:
>> On 5/14/19 12:36 AM, Seb wrote:
>>> On Tuesday, 14 May 2019 at 21:06:05 UTC, Mike Franklin wrote:
>>>> On Tuesday, 14 May 2019 at 20:36:08 UTC, Eduard Staniloiu wrote:
>>>>
>>>>> Should `opCmp` return a float?
>>>>>
>>>>> The reason: when we attempt to compare two types that aren't 
>>>>> comparable (an unordered relationship) we can return float.NaN. 
>>>>> Thus we can differentiate between a valid -1, 0, 1 and an invalid 
>>>>> float.NaN comparison.
>>>>
>>>> Seems like a job for an enum, not a float or an integer.
>>>>
>>>> Mike
>>>
>>> +1 for enum. As far as I can see you only have four actual states:
>>>
>>> lower, equal, higher, nonComparable
>>
>> This won't work because the result of opCmp is compared against zero. 
>> Using a floating point number is likely to be more efficient.
> 
> A DIP should cite real evidence/data though.

I'm not sure I understand. I wouldn't know how to make an enum even 
work, let alone compare against that solution. I'd be in your debt if 
you showed how.

> Also, note that all other cases except comparing against NaN require 
> more instructions with a floating point number:
> 
> https://d.godbolt.org/z/lwzBVn

Thanks. Looks like that's the price if we want to support unordered objects.


More information about the Digitalmars-d mailing list