What am I doing wrong here - canFind with iota is not working

Laeeth Isharc via Digitalmars-d digitalmars-d at puremagic.com
Thu Feb 26 04:39:19 PST 2015


Hi John.

Tks help with ldc - will look at that shortly.

So Kingsly needs to use a predicate for canFind that returns true 
if the two values being compared are close enough to being the 
same given floating point quirks ?

Ie I think people diagnosed the problem, but what is the 
solution...

On Thursday, 26 February 2015 at 11:00:05 UTC, John Colvin wrote:
> On Thursday, 26 February 2015 at 10:55:43 UTC, Kingsley wrote:
>> float oneDegree = (PI / 180.0);
>> float first = -(oneDegree * 10.0);
>> float second = (oneDegree * 10.0);
>> float step = 0.000001;
>> float[] r = iota(first,second,step).array;
>>
>> writeln(r);
>>
>> float item = 0.174531;
>> writeln(r.canFind(item));
>>
>>
>> // returns false for canFind - even though that float is in 
>> the array ???
>
> Never check floating point numbers for equality, unless you've 
> really thought about how the floating point arithmetic for this 
> specific problem will go. Pretty much the only place it's 
> useful to do is in unit tests for maths libraries.



More information about the Digitalmars-d mailing list