Say you have a recursive formula along the lines of:
f(x) = p(x) + (-1)q(x) f(g(x))
where p, q, and g are easy to calculate.
In order to find f(x), you could write a recursive function, but for performance reasons you might prefer to implement it with an imperative loop.
The loop accumulates p(x) values and updates x to g(x), until some stopping condition is reached. But it needs to know whether to add or subtract each p(x), and that’s not as simple as looking at the parity of q(x).
If you expand out the formula, it becomes:
f(x) = p(x) + (-1)q(x) ( p(g(x)) + (-1)q(g(x)) ( … ) )
And we see that the sign applied to any particular value of p is the combined parity of all previous q values, not just the parity of the most recent value of q.
So you need to keep a sign variable outside the loop, and the parity of q(x) tells you whether or not to negate that stored sign value on each iteration.
If p(x) itself is initialized from a sign, exponent, and significand, then it makes sense to use the stored sign directly, rather than introduce an extraneous conditional test to negate p (or its significand).
• • •
That’s a separate issue, about the (lack of) clarity of that initializer.
However it’s worth noting that if you’re using a raw significand, then you can’t simply negate the significand.