Sortof. Floats can have more than the minimum required precision. Passing them to a function or assigning them a to a variable tends to destroy the extra precision, but casting directly to double doesn't.

(flunf+2) can't be represented as a float, unless it has extra precision, allowing the comparisons to be using a value that's different from the insert even though they're computed with the same expression.

The section called Wrong #2: Precision explains the problem: floats may have extra precision, but it's not consistent and so you can end up with the same written expression giving two different values.

(Notice that I used flunf + 2 twice, instead of re-using valueToInsert. The extra precision only applies to the second one, on my machine.)