On Monday, 1 October 2012 at 13:08:07 UTC, Maxim Fomin wrote:
2012/10/1 monarch_dodra <[email protected]>:
On Monday, 1 October 2012 at 11:36:43 UTC, Maxim Fomin wrote:

On Sunday, 30 September 2012 at 17:07:19 UTC, monarch_dodra wrote:

As a rule of thumb, NEVER use opEqual with floating point types aniways. You need to use some sort of comparison with leway for error, such as
std.math.approxEqual.


It is possible to compare exactly floating point types by binary
comparison, if it provides some benefits.

import std.stdio;
import std.math;

@property float getFloat()
{
   return sqrt(1.1);
}

void main()
{
   writeln(getFloat is getFloat);  // doesn't fail
}


I think that what you are comparing here is the functions (the address), and
not the results of the call. Try
writeln(getFloat() is getFloat()); //*May* fail


http://dpaste.dzfl.pl/1f94c0b1
[SNIP]

Hum, yes, I guess I was wrong about the comparison of functions. Sorry!

Also, "is" works like opEqual on built in types, AFAIK, it doesn't use any
"binary" magic or anything like that.

I don't understand what you are trying to say. Is operator at runtime compares two objects without calling opEquals functions (if applied on user-defined types). For built-in and derived types it is similar to
== operator. Although, I am suprised that TDPL and spec doesn't
mention it (focused only on CT usage), there is a paragraph
(http://ddili.org/ders/d.en/null_is.html) from Turkish D book which clearly shows such usage - so, I think this a valid D feature. Object
comparison at low-level (repz cmpsb) means binary comparison.

What I was saying is that for built in types such a floats, "is" is (should be) no different from "==".

But you catch something interesting: the fact that it provides different results is (IMO), a bug. Looking at it, I'd say the bug is probably that "==" is overly sensitive to extended precision.

I've filed a BR:
http://d.puremagic.com/issues/show_bug.cgi?id=8745

Please feel free to add anything to it. We'll see if Walter will react to it for a more definite answer.

Reply via email to