Sorting floating-point values, and NaN
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Tue Nov 12 13:15:39 PST 2013
On 11/12/13 12:45 PM, Vladimir Panteleev wrote:
>> assert((equiv(a, b) && equiv(b, c)) <= equiv(a, c));
>
> OK, we're on the same page so far (although you've presented the problem
> more eloquently).
>
>> ("<=" on Booleans is actually implication.)
>
> (Cool!)
(... the disadvantage being b is evaluated even if a is false.
Shouldn't; false implies everything.)
>> That test will fail with NaNs and should be part of isSorted, sort etc.
>
> OK, but which a, b and c will be checked? Taking all adjacent triples
> will not work with two adjacent NaNs.
We can make that work if we insert the tests at the end of a run of
equivalent values. That would still miss other cases though in isSorted
(I think sort() can actually be much more thorough there). The point
here is that we should work together on an innovative solution. Getting
bogged in the "there's a problem with the language here" mindset
prevents the forming of good ideas.
>> We should also check such as:
>>
>> assert(!less(a, a));
>> assert(less(a, b) <= !less(b, a));
>
> Again, for which a/b?
In the isSorted case, for all adjacent values inspected. For sort,
assertions can be added after each less() that does work.
Andrei
More information about the Digitalmars-d
mailing list