Bug? shuffle() breaks normalisation test

It’s important to understand what does: by default it checks to see if two floating point values are equal for the first half of their significant digits. That’s pretty lenient but also quite standard. To be used with caution but also essential when checking results that can depend on numerical round off. I’m afraid the only answer here is to have some grasp of numerical analysis and to use judgement. Replacing all equality checks with is definitely not a good idea. Nor would it even be sufficient: 0.0 is never approximately equal to any non-zero value since it has no scale so you can’t know which bits should be considered significant or not. As the docs for say:

In particular, summation, even though it seems like an innocuous operation is sensitive to data ordering. In fact, you can sum the same set of numbers in different orders and get basically any possible result:

We don’t use naive summation by default in Julia, so things aren’t quite that bad, and if you’re only adding up positive values it’s not possible to have such a pathological situation, but keep this in mind.

3 Likes