<div dir="ltr">Hi All,<div><br></div><div>APFloat::fusedMultiplyAdd currently computes the wrong signed zero when small negative results are truncated back to zero in standard precision. The following snippet handles the signedness in fusedMultiplyAdd:</div><div><br></div><font face="monospace, monospace">/* If two numbers add (exactly) to zero, IEEE 754 decrees it is a<br>   positive zero unless rounding to minus infinity, except that                                                    <br>   adding two like-signed zeroes gives that zero.  */</font><div><font face="monospace, monospace">if (category == fcZero && sign != addend.sign)<br>  sign = (rounding_mode == rmTowardNegative);</font><div><br></div><div>The test "category == fcZero" tells us that the result was zero after rounding back down to standard precision, but since the addition is carried out in extended precision this doesn't guarantee that the result of the addition was exactly zero (so the comment text may not apply). The attached patch adds a check for underflow during truncation which ensures the correct signedness of the result.</div><div><br></div><div>Cheers,</div><div>Lang.</div></div><div><br></div><div><br></div></div>