News for hackers. Stuff that matters.
Re:Diagnosing a Linux-only unit test failure by alexfoo on Monday October 09, 2017 @10:47AM (#15434223)
Comparing doubles with == ?
Re:Diagnosing a Linux-only unit test failure by maccard on Monday October 09, 2017 @12:09PM (#15435072)
Nothing wrong with it, if you know what you're doing. [0] and [1] are great articles on the topic

[0] https://randomascii.wordpress.com/2012/02/25/comparing-float... [1] https://randomascii.wordpress.com/2017/06/19/sometimes-float...

Re:Diagnosing a Linux-only unit test failure by xioxox on Monday October 09, 2017 @11:37AM (#15434745)
That's absolutely fine if they are set with explicit values or were assigned with the same double. The main issues used to be with the old x86 80 bit wide floating point registers which meant you could sometimes find x != x depending on whether the number went to memory and back.
Re:Diagnosing a Linux-only unit test failure by twic on Monday October 09, 2017 @01:34PM (#15435786)
There's also oddity around NaN - if x is NaN, then, on a compliant chip, x != x regardless of whether it's ever visited main memory.

If you find some reason to use a NaN inside one of these GeoPoints (at one of the poles, perhaps), and the equality of them depends on the equality of doubles, then you may give your users a bit of a surprise.

Re:Diagnosing a Linux-only unit test failure by half-kh-hacker on Monday October 09, 2017 @11:36AM (#15434720)
I'm not versed in C#, what should you use otherwise?
Re:Diagnosing a Linux-only unit test failure by philh on Monday October 09, 2017 @12:01PM (#15434992)
It's not a C# thing, it's a floating-point thing. Two numbers which mathematically "should" be equal, might not be due to rounding errors. (In python, 0.15 + 0.15 != 0.1 + 0.2.) So it's risky to compare them with ==, sometimes you'll get the result you expect (and sometimes you can be confident of that) but sometimes you won't. If you can't be sure, you should compare that they're the same within some threshold, but that has pitfalls as well.

(I feel a little silly saying "it's not a language thing" and then "in python", but there may (or may not) be various implementation details which other languages might use to get a different result.)

Re:Diagnosing a Linux-only unit test failure by smitherfield on Monday October 09, 2017 @03:41PM (#15436799)
`0.1 + 0.2 != 0.3` is a property of all (base-2) floating-point arithmetic, no matter the precision or programming language.
Re:Diagnosing a Linux-only unit test failure by estomagordo on Tuesday October 10, 2017 @07:13AM (#15440855)
Well yeah, but this was 0.1 + 0.2 != 0.15 + 0.15, and there's no obvious reason why 0.15 + 0.15 = 0.3 imo.
Re:Diagnosing a Linux-only unit test failure by philh on Tuesday October 10, 2017 @07:15AM (#15440859)
I interpreted their comment as "here's an example that will always work", and I appreciated it in that light.